Struts2輸入校驗

1、Struts2輸入校驗介紹html

Struts2提供了功能強大的輸入校驗機制,經過Struts2內建的輸入校驗器,應用無需書寫任何代碼,便可完成大部分的校驗功能,並能夠同時完成客戶端和服務器端的校驗。若是應用的輸入校驗規則特別,Struts也容許經過重寫validate方法來完成自定義校驗。java

Struts2中能夠經過重寫validate方法來完成輸入校驗。若是咱們重寫了validate方法,則該方法會應用於此Action中的全部提供服務的業務方法。Struts2支持校驗特定方法的validateXxx()方法。例如某個Action中有一個save()業務方法,咱們能夠寫一個validateSave()方法來進行save()的特殊校驗,客戶端請求調用的次序以下:正則表達式

validateSave()--------------àvalidate()------------àsave()express

Struts2的輸入校驗流程以下:服務器

1.       類型轉換器負責對字符串的請求參數執行類型轉換,並將這此值設置成Action的屬性值。ui

2.       在執行類型轉換器過程當中可能出現異常,若是出現異常,將異常信息保存到ActionContext中,conversionError攔截器負責將其封裝到fieldError裏,而後執行第3步;若是轉換過程沒有異常信息,則直接進入第3步。url

3.       經過反射嗲用validateXxx()方法,其中Xxx是即將處理用戶請求的處理邏輯所對應的方法名。spa

4.       經過Action類裏的validate()方法code

5.       若是通過上面4步都沒有出現fieldError,將調用Action裏處理用戶的處理方法;若是出現了fieldError,系統將轉入input邏輯視圖所指定的視圖資源。orm

2、Struts2輸入檢驗

1.       最基礎的Struts輸入檢驗

Struts2中單獨對每個Action指定一個校驗文件,它的命名方式ActionName-validate.xml。他存放在與Action相同的保重,校驗只須要配置一個校驗文件便可實現。系統的其餘地方不須要改動,系統自動加載該文件。校驗PersonAction-validate.xml以下例:

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

  3. <!--校驗文件的根元素-->

  4. <validators>

  5. <!--校驗Action的username屬性-->

  6.    <field name="username">

  7. <!--指定username屬性必須知足必填規則-->

  8.        <field-validator type="requiredstring">

  9.            <!--校驗去掉username屬性的先後空格-->

  10.            <param name="trim">true</param>

  11.            <!--提示信息-->

  12.            <message>用戶名不能爲空!</message>

  13.        </field-validator>

  14.    </field>

  15.    <field name="mobile">

  16.        <field-validator type="requiredstring">

  17.            <param name="trim">true</param>

  18.            <message>手機號不能爲空!</message>

  19.        </field-validator>

  20.        <!—指定手機號必須知足匹配指定的正則表達式-->

  21.        <field-validator type="regex">

  22.            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>

  23.            <message>手機號格式不正確!</message>

  24.        </field-validator>

  25.    </field>

  26. </validators>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<!--校驗文件的根元素-->
<validators>
<!--校驗Action的username屬性-->
    <field name="username">
<!--指定username屬性必須知足必填規則-->
        <field-validator type="requiredstring">
            <!--校驗去掉username屬性的先後空格-->
            <param name="trim">true</param>
            <!--提示信息-->
            <message>用戶名不能爲空!</message>
        </field-validator>
    </field>
    <field name="mobile">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>手機號不能爲空!</message>
        </field-validator>
        <!—指定手機號必須知足匹配指定的正則表達式-->
        <field-validator type="regex">
            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
            <message>手機號格式不正確!</message>
        </field-validator>
    </field>
</validators>

上面的配置文件的編寫是對Action中全部的的方法進行了校驗,若是想要對指定的Action中的方法進行校驗,只要將將配置文件的命名改成ActionName-xxx-validate.xml便可。

2.       Struts2中輸入校驗提示信息的國際化

在Struts2的校驗中應用國際化也很是簡單,請看以下xml配置代碼

  1. <field name="username">

  2.        <field-validator type="requiredstring">

  3.            <param name="trim">true</param>

  4.            <message key=」username.requied」> </message>

  5.        </field-validator>

  6. </field>

  7. <field name="mobile">

  8.        <field-validator type="requiredstring">

  9.            <param name="trim">true</param>

  10.            <message>手機號不能爲空!</message>

  11.        </field-validator>

  12.        <field-validator type="regex">

  13.            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>

  14.            <message key=」mobile.regex」> </message>

  15.    </field-validator>

  16. </field>

  17. <span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>

<field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key=」username.requied」> </message>
        </field-validator>
</field>
<field name="mobile">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>手機號不能爲空!</message>
        </field-validator>
        <field-validator type="regex">
            <param name="expression"><![CDATA[^1[358]\\d{9}$]]></param>
            <message key=」mobile.regex」> </message>
    </field-validator>
</field>

Message元素指定key屬性指定的是國際化資源中對應的key。還能夠使用一下配置國際化資源中的信息:<message>${getText(「username.requried」)}</message>這種方式是經過調用ActionSupport類中getText()方法來獲取國際化資源的。

三、 Struts2中應用客戶端輸入校驗

使用客戶端輸入校驗能夠減輕服務器的負擔。 Struts2 對客戶端的輸入校驗進行了封裝,使得咱們開發時特別容易。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>

  2. <%@taglib prefix="s" uri="/struts-tags" %>

  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

  4. <html>

  5.         <head>

  6.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

  7.         <title>註冊頁面</title>

  8.    </head>

  9.    <body>

  10.         <s:form action="save" validate="true">

  11.         <s:textfield label="用戶名" name="name"></s:textfield>

  12.         <s:password label="密碼" name="pass"></s:password>

  13.         <s:textfield label="年齡" name="age"></s:textfield>

  14.         <s:textfield label="生日" name="birth"></s:textfield>

  15.         <s:submit></s:submit>

  16.         </s:form>

  17.    </body>

  18. </html>

  19. <span style="font-family: Arial; background-color: rgb(255, 255, 255);"></span>

<%@ page language="java" contentType="text/html; charset=UTF-8"   pageEncoding="UTF-8"%>  
<%@taglib prefix="s" uri="/struts-tags" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
 <html>  
         <head>  
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         <title>註冊頁面</title>  
    </head> 
    <body>  
         <s:form action="save" validate="true">  
         <s:textfield label="用戶名" name="name"></s:textfield>  
         <s:password label="密碼" name="pass"></s:password>  
         <s:textfield label="年齡" name="age"></s:textfield>  
         <s:textfield label="生日" name="birth"></s:textfield>  
         <s:submit></s:submit> 
         </s:form>
    </body>  
</html>

注意這裏要用Struts2的標籤,form的validate屬性要設置爲true,而且不要將theme屬性指定爲simple(simple表示struts2將把這個解析成普通的HTML標籤)

2.校驗配置文件:這裏的校驗配置文件同原先的配置文件並無不一樣,可是這裏使用<message key=」name.requried」/>沒法從全局國際化資源中獲取信息,只能使用<message>${getText(「name.requried」)}</message>方式獲取國際化資源。

在Struts2中並非全部的服務器端校驗均可以轉換成客戶端校驗。客戶端校驗僅僅支持以下校驗器:

required validator 必填校驗器

requiredstring validator 必填字符串校驗器

stringlength validator 字符串長度校驗器

regex validator 正則表達式校驗器

email validator 郵件校驗器

url validator 網址校驗器

int validator 整數校驗器

double validator 雙精度數校驗器 。

3、多個校驗器規則文件的搜索次序

例若有一個 LoginAction 繼承 BaseAction ,這兩個 Action中都有業務方法 login ,而且存在 4 份校驗規則文件以下: BaseAction-vadition.xml, BaseAction-login-validation.xml , LoginAction-validation.xml, LoginAction-login-validation.xml 那麼用戶訪問 LoginAction 的 login 方法裏,會按照以上的順序執行校驗規則,實際的校驗規則是以上四個校驗規則的總和,可是若是存在衝突的狀況下,後面的校驗規則優先。

4、短路校驗器的配置

Struts2 默認的校驗配置是非短路的方式,即把一個字段全部的不符合要求的提示都提示用戶,咱們也能夠配置以短路的方式提示用戶,即當用戶輸入的條件不知足第一次校驗的時候就返回提示信息,再也不往下執行。這種配置方式只能是以字段爲基礎的校驗器。只須要在 <field-validator> 元素上加上 short-circuit="true" 便可,例如:

  1. <field name="name">

  2.    <field-validator type="requiredstring" short-circuit="true">

  3.       <param name="trim">true</param>

  4.       <message>${getText("name.requried")}</message>

  5.    </field-validator>

  6.    <field-validator type="regex">

  7.       <param name="expression"><![CDATA[(\w{4,25})]]></param>

  8.       <message>${getText("name.regex")}</message>

  9.    </field-validator>

  10. </field>

相關文章
相關標籤/搜索