通过XWork的validator框架也可以进行Struts2的数据校验,使用XWork的validator框架实现数据校验,只需编写一个验证文件便可。
验证文件由两种:一种是actionName-validation.xml,actionName是需要校验的Action的类名,且需要放到和该类相同的路径下,这种校验和validate()方法的作用相同;另一种是
actionName-methodName-validation.xml,actionName是需要校验的Action的类名,methodName是Action中某个业务处理方法的方法名,且需要放到和该类相同的路径下,这种校验和validateX()方法的作用相同。
采用字段验证方式时,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">1param> <param name="max">150param> <message>the age must be from 1 to 150!message> field-validator> field> validators> |
采用非字段校验方式时,validator元素是它的基本单位,每个validator元素指定一个校验规则。
l validators:校验文件的根元素;
l validator:validators元素下的元素,type属性指定了校验器的名称。一般情况下,该元素应该包含子元素以指定被校验的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">ageparam> <param name="min">1param> <param name="max">150param> <message>the age must be from 1 to 150!message> validator> <validator type="email"> <param name="fieldName">email_addressparam> <message>The eamil address you entered is not valid.message> validator> validators> |
上面介绍的两种校验方式都可以达到同样的效果,只是格式针对的对象不同。字段校验方式主要针对字段和属性,使用这种方式在校验时,对任何一个字段都能够返回一个明确的消息;而非子段校验方式则是将字段有效的组合在一起,这种方式不能对一个字段返回一个明确的消息。
字段校验方式和非字段校验方式校验方式,都需要用到校验器,下面就介绍一些常用的校验器。
(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">nameparam> <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">nameparam> <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">1param> <param name="max">150param> <message>the age must be from 1 to 150!message> field-validator> field> validators> |
int非字符校验方式:
<validators> <validator type="int"> <param name="fieldName">ageparam> <param name="min">1param> <param name="max">150param> <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">birthdayparam> <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_addressparam> <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">6param> <param name="maxLength">20param> <message>the name must be from 6 to 20 char!message> field-validator> field> validators> |
stringlength非字符校验方式:
<validators> <validator type="stringlength"> <param name="fieldName">nameparam> <param name="minLength">6param> <param name="maxLength">20param> <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> |