struts2 xml validator 校驗
阿新 • • 發佈:2019-01-15
分類:
【欄位校驗】
---- field-validator
---- 欄位優先,我去校驗誰(欄位),我用誰(校驗器)來校驗
【非欄位校驗】
---- validator
---- 校驗器優先,我用誰(校驗器)來校驗,我去校驗誰(欄位)
****** 這兩種只是 表現形式 不同,底層是相同的,都是把錯誤資訊放到fielderror中
命名:需要校驗的Action名 +-validation.xml
位置:要和需要校驗的Action放在同一目錄下
### 只對action中的某個方法進行校驗
-1-
需要校驗的Action名 + -方法名 +-validation.xml
|
對應xml中<action>的屬性的name值
如: RegisterAction-add-validation.xml
--對應 /add.action --對RegisterAction中的add()方法進行校驗
-2-
在不需要進行驗證的方法加上annotation,即在方法前加上@SkipValidation。
-3-
<action name=...>
<interceptor-ref name="defaultStack">
<paramFONT-FAMILY: georgia">validation.excludeMethods ">*</param>
<paramFONT-FAMILY: georgia">validation.includeMethods">需要驗證的方法名稱,以逗號分隔</param>
</interceptor-ref>
</action>
### 校驗順序
如果既提供了RegisterAction-validation.xml,又提供了RegisterAction-add-validation.xml
Struts2會先校驗RegisterAction-validation.xml,然後再去校驗RegisterAction-add-validation.xml
這兩個都會被呼叫
### 建議:
當有多個邏輯方法時,就不要提供RegisterAction-validation.xml
只提供相應方法的xml檔案,如:RegisterAction-execute-validation.xml
==============
== 欄位校驗 ==
==============
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-
validator-1.0.2.dtd">
<validators>
至少提供一個 field 或 validate
name必須提供
1個 field 表示對一個屬性的一次校驗
<field name="username">
<field>中至少有一個或多個<field-validator>
1個<field-validator>表示對它校驗的一種方式
type型別必須提供 型別=requiredstring 表示username必填
驗型別來自於 xwork-2.0.4.jar/com/opensymphony/xwork2/validator/validators/deault.xml
short-circuit:表示短路,預設false若設為true,表示:這個驗證器失敗了,就不再執行後面的驗證器了
<field-validator type="requiredstring" short-circuit="true">
<field-validator>中有若干個(0 ~ N)<param>子元素和一個<message>子元素
這裡的trim對應到requiredstring對應類RequiredStringValidator中的setTrim(boolean trim)方法設定的屬性doTrim
requiredstring這種校驗型別,doTrim預設設為true,所以這裡寫與不寫trim設為true都是一樣的
<param name="trim">true</param>
<message>使用者名稱不能為空!</message>
</field-validator>
驗證字串長度
<field-validator type="stringlength">
<param name="minLength">6</param> 最小長度,預設-1
<param name="maxLength">10</param> 最大長度,預設-1
<message>使用者名稱應該在 ${minLength} 和 ${maxLength} 之間</message>
也可以用國際化的方式:<message key="error.password.required"/>
</field-validator>
</field>
@@@ 驗證必填&字串長度 @@@@@@@@@@@@@@@@@@@@@@@
<field name="password">
<field-validatorFONT-FAMILY: georgia">requiredstring">
<message>密碼不能為空</message>
</field-validator>
<field-validatorFONT-FAMILY: georgia">stringlength">
<param name="minLength">6</param>
<paramFONT-FAMILY: verdana">maxLength">10</param>
<message>密碼應該在 ${minLength} 和 ${maxLength} 之間</message>
</field-validator>
</field>
@@@ 驗證數字 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<field name="age">
<field-validator type="required">
<message>年齡不能為空</message>
</field-validator>
<field-validatorFONT-FAMILY: georgia">int">
<paramFONT-FAMILY: verdana">min">1</param>
<paramFONT-FAMILY: verdana">max">150</param>
<message>年齡應該在 ${min} 和 ${max} 之間</message>
</field-validator>
</field>
@@@ 驗證日期 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<field name="birthday"> 型別為requiredString用於校驗String型別必填
<field-validator type="required"> 型別為required用於驗證String以外的型別必填
<message>生日不能為空</message>
</field-validator>
<field-validatorFONT-FAMILY: georgia">date">
<paramFONT-FAMILY: verdana">min">2001-01-01</param>
<param name="max">2008-08-08</param>
<message>生日應該在 ${min} 和 ${max} 之間</message>
</field-validator>
</field>
</validators>
========================================
default.xml中提供的校驗型別:
========================================
required 用於檢查值是否為null
requiredstring 用於檢查string是否為null或空, 引數trim,可在驗證前對字串執行trim操作
stringlength 檢查string的長度是否在某個範圍, 引數trim,minLength,maxLength
int/double 檢查某值是否為int/double且在某個範圍,引數min,max;minInclusive,maxInclusive,minExclusive,maxExclusive
date 檢查date的範圍, 引數min,max
email 檢查輸入是否為email格式
url 檢查輸入是否為url格式
conversion 檢查是否將出現資料轉換錯誤
expression_r_r_r/fieldexpression_r_r_r 檢查某個布林表示式的值是否為true,後者繫結到某個欄位上
引數expression_r_r_r
visitor 使用預定義的validators進行驗證,引數context
regex 檢查是否能匹配到正則表示式, 引數regex
@@@@@@@@@@@@@@
正則表示式驗證:
@@@@@@@@@@@@@@
<field name="bar2">
<field-validator type="regex">
<param name="regex">[0-9],[0-9]</param>
<message>
bar2的值必須是"x, y"這樣的格式 並且x、y都在0 ~ 9的範圍內
</message>
</field-validator>
@@@@@@@@@
URL
@@@@@@@@@
<field name="url">
<field-validator type="required" short-circuit="true">
<message>你需要輸入一個URL。</message>
</field-validator>
<field-validator type="url" short-circuit="true">
<message>URL錯誤。</message>
</field-validator>
</field>
@@@@@@@@@@@@
EMail
@@@@@@@@@@@@
<field name="mail">
<field-validator type="required">
<message>你需要輸入一個電子郵件的地址。</message>
</field-validator>
<field-validator type="email">
<message>非法的email格式。</message>
</field-validator>
</field>
@@@@@@@@@@@@
表示式
@@@@@@@@@@@@
<validator type="expression_r_r_r">
<param name="expression_r_r_r">name.equals(desc)</param>
<message>name not the same as desc</message>
</validator>
OR
<validatorexpression_r_r_r">foo gt bar</param>
<message>foo必須大於bar.</message>
</validator>
OR
<validator type="expression_r_r_r">
<param name="expression_r_r_r">email.e
【欄位校驗】
---- field-validator
---- 欄位優先,我去校驗誰(欄位),我用誰(校驗器)來校驗
【非欄位校驗】
---- validator
---- 校驗器優先,我用誰(校驗器)來校驗,我去校驗誰(欄位)
****** 這兩種只是 表現形式 不同,底層是相同的,都是把錯誤資訊放到fielderror中
命名:需要校驗的Action名 +-validation.xml
位置:要和需要校驗的Action放在同一目錄下
### 只對action中的某個方法進行校驗
-1-
需要校驗的Action名 + -方法名 +-validation.xml
|
對應xml中<action>的屬性的name值
如: RegisterAction-add-validation.xml
--對應 /add.action --對RegisterAction中的add()方法進行校驗
-2-
在不需要進行驗證的方法加上annotation,即在方法前加上@SkipValidation。
-3-
<action name=...>
<interceptor-ref name="defaultStack">
<paramFONT-FAMILY: georgia">validation.excludeMethods
<paramFONT-FAMILY: georgia">validation.includeMethods">需要驗證的方法名稱,以逗號分隔</param>
</interceptor-ref>
</action>
### 校驗順序
如果既提供了RegisterAction-validation.xml,又提供了RegisterAction-add-validation.xml
Struts2會先校驗RegisterAction-validation.xml,然後再去校驗RegisterAction-add-validation.xml
這兩個都會被呼叫
### 建議:
當有多個邏輯方法時,就不要提供RegisterAction-validation.xml
只提供相應方法的xml檔案,如:RegisterAction-execute-validation.xml
==============
== 欄位校驗 ==
==============
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-
validator-1.0.2.dtd">
<validators>
至少提供一個 field 或 validate
name必須提供
1個 field 表示對一個屬性的一次校驗
<field name="username">
<field>中至少有一個或多個<field-validator>
1個<field-validator>表示對它校驗的一種方式
type型別必須提供 型別=requiredstring 表示username必填
驗型別來自於 xwork-2.0.4.jar/com/opensymphony/xwork2/validator/validators/deault.xml
short-circuit:表示短路,預設false若設為true,表示:這個驗證器失敗了,就不再執行後面的驗證器了
<field-validator type="requiredstring" short-circuit="true">
<field-validator>中有若干個(0 ~ N)<param>子元素和一個<message>子元素
這裡的trim對應到requiredstring對應類RequiredStringValidator中的setTrim(boolean trim)方法設定的屬性doTrim
requiredstring這種校驗型別,doTrim預設設為true,所以這裡寫與不寫trim設為true都是一樣的
<param name="trim">true</param>
<message>使用者名稱不能為空!</message>
</field-validator>
驗證字串長度
<field-validator type="stringlength">
<param name="minLength">6</param> 最小長度,預設-1
<param name="maxLength">10</param> 最大長度,預設-1
<message>使用者名稱應該在 ${minLength} 和 ${maxLength} 之間</message>
也可以用國際化的方式:<message key="error.password.required"/>
</field-validator>
</field>
@@@ 驗證必填&字串長度 @@@@@@@@@@@@@@@@@@@@@@@
<field name="password">
<field-validatorFONT-FAMILY: georgia">requiredstring">
<message>密碼不能為空</message>
</field-validator>
<field-validatorFONT-FAMILY: georgia">stringlength">
<param name="minLength">6</param>
<paramFONT-FAMILY: verdana">maxLength">10</param>
<message>密碼應該在 ${minLength} 和 ${maxLength} 之間</message>
</field-validator>
</field>
@@@ 驗證數字 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<field name="age">
<field-validator type="required">
<message>年齡不能為空</message>
</field-validator>
<field-validatorFONT-FAMILY: georgia">int">
<paramFONT-FAMILY: verdana">min">1</param>
<paramFONT-FAMILY: verdana">max">150</param>
<message>年齡應該在 ${min} 和 ${max} 之間</message>
</field-validator>
</field>
@@@ 驗證日期 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
<field name="birthday"> 型別為requiredString用於校驗String型別必填
<field-validator type="required"> 型別為required用於驗證String以外的型別必填
<message>生日不能為空</message>
</field-validator>
<field-validatorFONT-FAMILY: georgia">date">
<paramFONT-FAMILY: verdana">min">2001-01-01</param>
<param name="max">2008-08-08</param>
<message>生日應該在 ${min} 和 ${max} 之間</message>
</field-validator>
</field>
</validators>
========================================
default.xml中提供的校驗型別:
========================================
required 用於檢查值是否為null
requiredstring 用於檢查string是否為null或空, 引數trim,可在驗證前對字串執行trim操作
stringlength 檢查string的長度是否在某個範圍, 引數trim,minLength,maxLength
int/double 檢查某值是否為int/double且在某個範圍,引數min,max;minInclusive,maxInclusive,minExclusive,maxExclusive
date 檢查date的範圍, 引數min,max
email 檢查輸入是否為email格式
url 檢查輸入是否為url格式
conversion 檢查是否將出現資料轉換錯誤
expression_r_r_r/fieldexpression_r_r_r 檢查某個布林表示式的值是否為true,後者繫結到某個欄位上
引數expression_r_r_r
visitor 使用預定義的validators進行驗證,引數context
regex 檢查是否能匹配到正則表示式, 引數regex
@@@@@@@@@@@@@@
正則表示式驗證:
@@@@@@@@@@@@@@
<field name="bar2">
<field-validator type="regex">
<param name="regex">[0-9],[0-9]</param>
<message>
bar2的值必須是"x, y"這樣的格式 並且x、y都在0 ~ 9的範圍內
</message>
</field-validator>
@@@@@@@@@
URL
@@@@@@@@@
<field name="url">
<field-validator type="required" short-circuit="true">
<message>你需要輸入一個URL。</message>
</field-validator>
<field-validator type="url" short-circuit="true">
<message>URL錯誤。</message>
</field-validator>
</field>
@@@@@@@@@@@@
@@@@@@@@@@@@
<field name="mail">
<field-validator type="required">
<message>你需要輸入一個電子郵件的地址。</message>
</field-validator>
<field-validator type="email">
<message>非法的email格式。</message>
</field-validator>
</field>
@@@@@@@@@@@@
表示式
@@@@@@@@@@@@
<validator type="expression_r_r_r">
<param name="expression_r_r_r">name.equals(desc)</param>
<message>name not the same as desc</message>
</validator>
OR
<validatorexpression_r_r_r">foo gt bar</param>
<message>foo必須大於bar.</message>
</validator>
OR
<validator type="expression_r_r_r">
<param name="expression_r_r_r">email.e