1. 程式人生 > >Struts2資料校驗(2)--使用XWork檢驗框架實現校驗

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!

</message>

</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>