`

《研磨struts2》第十章 验证框架 之 10.4 内建验证器

 
阅读更多

10.4  内建验证器

10.4.1概述

Struts2的验证框架已经为我们建立了足够多的内建验证器,以满足不同的验证要求,接下来就来逐一学习这些内建的验证器。

       Struts2的内建验证器的声明文件被放置在xwork-core-2.1.6.jar文件中,其位置为/com/opensymphony/xwork2/validator/validators/default.xml,内容为:

 

java代码:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator Config 1.0//EN"  
  4.         "http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">  
  5.   
  6. <!-- START SNIPPET: validators-default -->  
  7. <validators>  
  8.     <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>  
  9.     <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>  
  10.     <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>  
  11.     <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>  
  12.     <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>  
  13.     <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>  
  14.     <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>  
  15.     <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>  
  16.     <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>  
  17.     <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>  
  18.     <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>  
  19.     <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>  
  20.     <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>  
  21.     <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>  
  22.     <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>  
  23.     <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>  
  24. </validators>  
  25. <!--  END SNIPPET: validators-default -->  

在这个文件中,每个内建验证器都以一个<validator>元素出现,其name属性为验证器的名字,而class属性为这个验证器的实现类。注意:在前面的配置中也接触到了<validator>元素,但是此<validator>元素是在定义一个验证器,而不是像前面那样,是在引用一个验证器。

10.4.2类型转换错误验证器(conversion)

conversion验证器用来验证类型转换时是否出错。如果一个类型为int的参数接到了“18a”这个字符串,conversion验证器就会报错。

       conversion验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.3整数验证器(int)

int验证器用来验证一个整数型参数是否在指定的范围内。如果一个已经被成功转换为int的属性不在验证器指定的范围内,int验证器就会报错。

       int验证器可以有两个参数:

  • min用来指定可接受范围的最小值。
  • max用来指定可接收范围的最大值。

注意:conversion验证器验证的是参数能不能被正确转化为整数,int验证器是在参数已经被正确的转化为整数之后,再考察它的范围。因此,如果想限制年龄文本框填入整数类型的数字,并且在18岁以上,需要先引用conversion验证器检查用户填入的是否是一个整数,然后再引用int验证器来检查用户填入的年龄是否大于等于18。

int验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.4短整数验证器(short)和长整数验证器(long)

short验证器和long验证器与int验证器非常相似,都是用来验证参数是否在指定范围之内,就不去赘述了。

       short验证器和long验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.5日期验证器(date)

date验证器用来验证一个日期型参数是否在指定的范围内。如果一个已经被成功转换为date的属性不在验证器指定的范围内,date验证器就会报错。

       date验证器可以有两个参数:

  • min用来指定可接受范围的最小值。
  • max用来指定可接收范围的最大值。

注意:指定日期范围的时候,需要使用统一的格式,比如用MM/DD/YYYY的格式等。

date验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.6双精度浮点验证器(double)

double验证器用来验证一个双精度浮点型参数是否在指定的范围内。如果一个已经被成功转换为double的属性不在验证器指定的范围内,double验证器就会报错。

       double验证器可以有四个参数:

  • minInclusive用来指定可接受范围的最小值,包含给定值。
  • maxInclusive用来指定可接收范围的最大值,包含给定值。
  • minExclusive用来指定可接受范围的最小值,不包含给定值。
  • maxExclusive用来指定可接收范围的最大值,不包含给定值。

double验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.7邮件验证器(email)

email验证器用来验证一个参数是否为邮箱地址。

email验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.8 URL验证器(url)

url验证器用来验证一个参数是否为合法的URL。

       url验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.9必填验证器(required)

required验证器用来验证一个参数是否不为null。

       required验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.10必填字符串验证器(requiredstring)

requiredstring验证器用来验证一个字符串参数是否非空,既不为null,且长度大于0。

       requiredstring验证器只有一个参数:

  • trim:是否去掉字符串两边的空白,默认为true。

requiredstring验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.11字符串长度验证器(stringlength)

stringlength验证器用来验证一个字符串的长度是否在指定范围内。

stringlength验证器有三个参数:

  • maxLength:字符串长度的最大值。
  • minLength:字符串长度的最小值。
  • trim:是否去掉字符串两边的空白,默认为true。

stringlength验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.12正则表达式验证器(regex)

regex验证器用来验证一个字符串是否符合一个正则表达式的要求。

       regex验证器有三个参数:

  • expression:必填参数,正则表达式。
  • caseSensitive:是否检查大小写。
  • trim:是否去掉字符串两边的空白,默认为true。

regex验证器既可以用于字段验证器,又可以用于动作验证器。

10.4.13字段表达式验证器(fieldexpression)和表达式验证器(expression)

fieldexpression验证器中必须指定一个返回布尔值的ognl表达式,根据这个表达式的值来确定是否符合条件。

       fieldexpression验证器只有一个参数:

  • expression:返回布尔值的ognl表达式,可以在这个ognl表达式中访问当前的值栈。

regex验证器既可以用于字段验证器,又可以用于动作验证器。

       表达式验证器(expression)与字段表达式验证器(fieldexpression)类似,同样使用expression参数来指定返回布尔值的ognl表达式,但是,只能用于动作验证器。

10.4.14访问者验证器(visitor)

visitor验证器用于验证Action中的复合属性,可以直接把验证信息放到域对象中去注册,这样就使得同包内的不同Action在验证同一个域对象时,不用注册重复的验证信息。

       vistior验证器有两个属性:

  • context:引用的域对象验证信息文件上下文名。
  • appendPrefix:是否在错误信息中添加<message>元素指定的前缀。

来示例一下,仍然要检查user.age大于等于18岁。保持Action不变,修改一下原来的验证信息文件,示例如下:

 

java代码:
  1. <validators>    
  2.     <field name="user">  
  3.         <field-validator type="visitor">  
  4.             <param name="context">c1</param>  
  5.             <param name="appendPrefix">true</param>  
  6.             <message>用户</message>  
  7.         </field-validator>  
  8.     </field>  
  9. </validators>  

上面的示例,在user字段上指定了一个visitor验证器,设置上下文的名称为c1,设置前缀为true,也就是说在发生错误的时候,要在c1上下文返回的错误信息前加上“用户”这个前缀。

       接下来新添一个上下文验证文件,其文件名为“字段的简单类名-上下文名-validation.xml”,比如现在要为user属性指定一个名为c1的上下文,所以文件名为UserModel-c1-validation.xml,放在与域对象同级的包内,即UserModel所在的包内,注意:不再是与Action同级的包内了,其内容示例为:

 

java代码:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE validators PUBLIC  
  3.         "-//OpenSymphony Group//XWork Validator 1.0//EN"        "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">  
  4.           
  5. <validators>  
  6.     <field name="age">  
  7.         <field-validator type="int">  
  8.             <param name="min">18</param>  
  9.             <message>年龄要大于等于18</message>  
  10.         </field-validator>  
  11.     </field>  
  12. </validators>  

它的本质也是一个验证文件,与之前直接在RegisterAction-validation.xml直接写出对user.age的验证相比,没有本质上的区别,只是这个文件以UserModel类为验证的根,所以<field>元素的name属性直接写age就可以了,而不再是原来的user.age。至于使用验证器的方式和配置都不变,就不去赘述了。

 

私塾在线网站原创《研磨struts2》系列

转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4093.html

欢迎访问http://sishuok.com获取更多内容

10
5
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics