Struts2資料校驗(2)--使用XWork檢驗框架實現校驗
2.使用XWork檢驗框架實現校驗
通過XWork的validator框架也可以進行Struts2的資料校驗,使用XWork的validator框架實現資料校驗,只需編寫一個驗證檔案便可。
1.驗證檔案
驗證檔案由兩種:一種是actionName-validation.xml,actionName是需要校驗的Action的類名,且需要放到和該類相同的路徑下,這種校驗和validate()方法的作用相同;另一種是
actionName-methodName-validation.xml,actionName是需要校驗的Action的類名,methodName是Action中某個業務處理方法的方法名,且需要放到和該類相同的路徑下,這種校驗和validateX()方法的作用相同。
2.校驗配置
(1)欄位校驗方式(Field-validator)
採用欄位驗證方式時,field是作為基本的子元素。
l validators:校驗檔案的根元素;
l field:是validators元素下的元素,name屬性指定了被校驗的欄位;
l field-validator:field元素下的元素,type屬性用來指定校驗器的名稱,每個field-validator元素都可以指定一個校驗規則且每個field-validator屬性都必須包含一個message元素;
l message:field-validator元素下的必備元素,該元素指出校驗出錯後的提示資訊;
l param:field-validator元素下的元素,該元素指定了校驗過程中使用到的引數。
示例如下:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <field name="name"> <field-validator type="requiredstring"> <message>the name is requred! </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>the age must be from 1 to 150!</message> </field-validator> </field> </validators> |
(2)非欄位校驗方式(Non-Field validator)
採用非欄位校驗方式時,validator元素是它的基本單位,每個validator元素指定一個校驗規則。
l validators:校驗檔案的根元素;
l validator:validators元素下的元素,type屬性指定了校驗器的名稱。一般情況下,該元素應該包含子元素<param name=”filedName”>以指定被校驗的Action名。
l param:validator元素下的元素。
示例如下:
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"> <validators> <validator type="int"> <param name="fieldName">age</param> <param name="min">1</param> <param name="max">150</param> <message>the age must be from 1 to 150!</message> </validator> <validator type="email"> <param name="fieldName">email_address</param> <message>The eamil address you entered is not valid.</message> </validator> </validators> |
上面介紹的兩種校驗方式都可以達到同樣的效果,只是格式針對的物件不同。欄位校驗方式主要針對欄位和屬性,使用這種方式在校驗時,對任何一個欄位都能夠返回一個明確的訊息;而非子段校驗方式則是將欄位有效的組合在一起,這種方式不能對一個欄位返回一個明確的訊息。
3.校驗器(validator)
欄位校驗方式和非欄位校驗方式校驗方式,都需要用到校驗器,下面就介紹一些常用的校驗器。
(1) required校驗器:要求指定的欄位必須是非空的;
required字元校驗方式:
<validators> <field name="name"> <field-validator type="required"> <message>the name is required!</message> </field-validator> </field> </validators> |
required非字元校驗方式:
<validators> <validator type="required"> <param name="fieldName">name</param> <message>the name is required!</message> </validator> </validators> |
(2) requiredstring校驗器:要求欄位值必須非空且長度必須大於0;
requiredstring字元校驗方式:
<validators> <field name="name"> <field-validator type="requiredstring"> <message>the name is required!</message> </field-validator> </field> </validators> |
requiredstring非字元校驗方式:
<validators> <validator type="requiredstring"> <param name="fieldName">name</param> <message>the name is required!</message> </validator> </validators> |
(3) int校驗器:整數校驗器,可以指定欄位的整數值必須在指定的範圍內,需要標註min和max引數。(注:long、short和浮點數等校驗器和int校驗器型別)
int字元校驗方式:
<validators> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">150</param> <message>the age must be from 1 to 150!</message> </field-validator> </field> </validators> |
int非字元校驗方式:
<validators> <validator type="int"> <param name="fieldName">age</param> <param name="min">1</param> <param name="max">150</param> <message>the age must be from 1 to 150!</message> </validator> </validators> |
(4) date校驗器:要求指定欄位的日期在指定的範圍內;
date字元校驗方式:
<validators> <field name="birthday"> <field-validator type="date"> <message>The date you entered is not valid.</message> </field-validator> </field> </validators> |
date非字元校驗方式:
<validators> <validator type="date"> <param name="fieldName">birthday</param> <message>the name is requred!</message> </validator> </validators> |
(5) email校驗器:用來校驗郵箱地址是否合法;
email字元校驗方式:
<validators> <field name=" email_address "> <field-validator type=" email "> <message> The eamil address you entered is not valid.</message> </field-validator> </field> </validators> |
email非字元校驗方式:
<validators> <validator type="email"> <param name="fieldName">email_address</param> <message>The eamil address you entered is not valid.</message> </validator> </validators> |
(6) stringlength校驗器:校驗欄位的長度必須在指定的範圍內。
stringlength字元校驗方式:
<validators> <field name="name"> <field-validator type="stringlength"> <param name="minLength">6</param> <param name="maxLength">20</param> <message>the name must be from 6 to 20 char!</message> </field-validator> </field> </validators> |
stringlength非字元校驗方式:
<validators> <validator type="stringlength"> <param name="fieldName">name</param> <param name="minLength">6</param> <param name="maxLength">20</param> <message>the age must be from 6 to 20 char!</message> </validator> </validators> |
註釋:如果想知道更多的校驗器,可以找到位於xwork-2.0.4.jar壓縮包中( com.opensymphony.xwork2.validator.validators)有個檔案default.xml ,該檔案中定義了Struts2框架內建的校驗器。default.xml檔案定義了常用的校驗器型別,如下:
<validators> <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/> <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/> <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/> <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/> <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/> <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/> <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/> <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/> <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/> <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/> <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/> <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/> <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/> <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/> <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/> <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/> </validators> |