首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

《研磨struts2》第十章 证验框架 之 10.7 验证器框架的查找顺序

2012-08-27 
《研磨struts2》第十章 验证框架 之 10.7 验证器框架的查找顺序10.7??验证器框架的查找顺序10.7.1??验证器框

《研磨struts2》第十章 验证框架 之 10.7 验证器框架的查找顺序

10.7??验证器框架的查找顺序

10.7.1??验证器框架的查找顺序

Struts2的验证框架为了使验证信息通用,指定了较为复杂的验证继承关系,当验证框架需要验证一个Action的时候,会按照以下的优先级收集验证信息:

  • 父类-validation.xml
  • 父类-别名-validation.xml
  • 接口-validation.xml
  • 接口-别名-validation.xml
  • Action类名-validation.xml
  • Action类名-别名-validation.xml

    别名其实对应的就是<action>元素的method属性的值,因此,虽然看着很多,其实我们只需要记住基本的顺序是:父类 > 接口 > Action类 就可以了。

    这里还需要强调一点,接口-validation.xml优先于Action类名-validation.xml的含义,并不是找到了接口-validation.xml就不管Action类名-validation.xml,而是对于同名的字段验证器来说,两个验证都要进行,不过接口-validation.xml中的验证先于Action类名-validation.xml中的验证进行。

    (1)来建立一个BaseAction,让它去继承ActionSupport,但是里面什么都不做;然后让RigisterAction来继承BaseAction,示例代码如下:

    ?

    图10.8 验证器的优先顺序

    10.7.2??验证器短路

    什么是验证器短路呢?简单点说,就是当一个字段有多个验证条件的时候,在第一次出现验证错误后,就立即终止验证,后续对这个字段的验证就不再进行了,这就叫验证器短路。

    比如上面示例中对年龄的验证,有两个验证条件,一个是要求年龄要大于等于15岁,另一个是要求年龄大于等于18岁,在前面的示例中,虽然一个都没有通过,但是两个验证条件都执行了。

    ?????? 那么怎么做,就能够让验证通不过第一个条件的时候,后续对这个字段的验证就不用继续进行了呢?

    ?????? 很简单,就是在验证器的配置上,设置short-circuit属性,使其值为"true"。short-circuit属性可以设置在<field-validator>上,也可以设置在<validator>元素上。

    就在上面的示例中,修改BaseAction-validation.xml,在<field-validator>上设置short-circuit属性的值为true,示例代码如下:

    ?

    图10.9? 验证短路

    对年龄只有一个验证信息,因为第一个出错了,然后被短路了,那么后面的验证就不用执行了。

    ?

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

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

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

热点排行