9.2 基於Struts 2驗證框架的輸入校驗
Struts 2提供了更高效,簡易的校驗框架,用戶只需設置校驗配置文件即可完成輸入校驗。基於驗證框架來完成輸入校驗,只需在與Action同目錄下下創建一個xml格式的驗證文件即可,而無需validate方法。
實現了Action類與配置文件的分離,在配置文件中實現對Action類中某字段的校驗。
(1) 編輯校驗規則文件
校驗文件是XML格式,命名規則:<Action類名>-validation.xml ,每一個Action都可以對應有一個這樣的校驗配置文件,用來對當前Action進行校驗。
field用來指定Action中要校驗的屬性字段,屬性字段名稱應該與field的name屬性值相同 ,在field中一般添加field-validator標記,用來指定驗證規則(是否爲空規則、字符組成規則),param用來指定正則表達式,message指定不符合規則的錯誤提示信息。
<Action名>-validation.xml文件示例:
(2) 字段校驗和非字段校驗:
<validators> <!-- 字段校驗field --> <fieldname="name"> <field-validatortype="requiredstring"> //requiredstring指的是必填字符串校驗器 ,也就是說校驗規則是必填字符串校驗器 <paramname="trim">true</param> <message>必須輸入用戶名!!!</message> </field-validator> <field-validatortype="regex"> <paramname="expression"><![CDATA[(\w{4,25})]]></param> <message>用戶名只能是字母和數字,且長度在4-25之間</message> </field-validator> </field> <!-- 非字段校驗 validator--> <validatortype="校驗器名稱"> <paramname="fieldName">要被校驗的字段</param> <paramname="參數名">參數值</param> <message>校驗錯誤提示信息</message> </validator> </validators> |
字段校驗和非字段校驗可混合在同一個XX-validation.xml文件中,但是有順序:所有非字段優於字段,非字段先校驗,若某個字段的非字段校驗失敗,則字段方式校驗都不執行,反之,字段校驗卻不會影響非字段。
(3) 配置校驗文件
XX-validation.xml校驗文件示例:
<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> //字段校驗field <fieldname="password"> <field-validatortype="requiredstring"> <messagekey="error.password.required"/> </field-validator> <field-validatortype="stringlength"> <paramname="trim">true</param> <paramname="minLength">4</param> <paramname="maxLength">10</param> <messagekey="errors.range"/> </field-validator> </field> <fieldname="password2"> <field-validatortype="requiredstring"> <messagekey="error.password2.required"/> </field-validator> </field> //非字段校驗validator <validatortype="expression"> <paramname="expression">password eq password2</param> <messagekey="error.password.match"/> </validator> </validators> |
配置中的兩個問題:
一、驗證器名稱
在 xwork-2.0.4.jar 包中,在 /com/opensymphony/xwork2/validator/validators 路徑下default.xml文件中有所有 Struts2 自帶的輸入校驗器定義。
分爲以下幾種:
1.required必填
2.requiredstring必填字符串
3.int整數
4.long
5.short
6.double
7.date日期
8.expression
9.fieldexpression字段表達式
10.email郵件地址
11.url網址
12.visitor
13.conversion
14.stringlength字符串長度
15.regex正則表達式
16.conditionalvisitor
二、用於輸出的提示信息用一個key來表示
message標籤的key屬性,其實是在一個用戶自定義的資源文件中提前定義好了的,方便實現國際化。
***用法:
首先自定義一個資源文件errorMsgs.properties
然後,將該資源文件在struts.xml中進行配置:
<constantname="struts.custom.i18n.resources"value="errorMsgs"></constant> |
最後纔可以在驗證文件中使用:
<fieldname="pass"> <field-validatortype="requiredstring"> <paramname="trim">true</param> <messagekey="pass.required"/> </field-validator> </field> |
9.3 使用客戶端校驗
Struts2要完成客戶端校驗,視圖頁面就必須使用Struts2標籤庫。然後在<s:form>標籤中添加validate=”true”屬性即可。form的theme不能是simple
<s:formaction="validateAction"validate="true"></s:form> |
其他任何文件不作改動,查看頁面源碼發現多了兩個JS文件,但效果並無太大區別。
<script type="text/javascript" src="/Struts2_Validate_ByFrame/struts/xhtml/validation.js"></script> <script type="text/javascript" src="/Struts2_Validate_ByFrame/struts/utils.js"></script> |