`

《研磨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,示例代码如下:

 

java代码:
  1. public class BaseAction extends ActionSupport{  
  2.   
  3. }  

(2)新建一个BaseAction-validation.xml,放到BaseAction同包里面,在里面指定用户填入的年龄不能小于15,示例代码如下:

 

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="user.age">  
  7.         <field-validator type="int">  
  8.             <param name="min">15</param>  
  9.             <message>年龄要大于等于15岁</message>  
  10.         </field-validator>  
  11.     </field>  
  12. </validators>  

(3)修改RegisterAction-validation.xml,里面指定用户的账号必须填,且用户填入的年龄不能小于18,示例代码如下:

 

java代码:
  1. <validators>  
  2.     <field name="user.account">  
  3.         <field-validator type="requiredstring">  
  4.             <message>请填入账号</message>  
  5.         </field-validator>  
  6.     </field>  
  7.     <field name="user.age">  
  8.         <field-validator type="int">  
  9.             <param name="min">18</param>  
  10.             <message>年龄要大于等于18岁</message>  
  11.         </field-validator>  
  12.     </field>  
  13. </validators>  

(4)这样一来,在验证RegisterAction的时候,验证框架找到了3个验证规则:

  • BaseAction-validation.xml中指定年龄必须不小于15。
  • RegisterAction-validation.xml中指定账号必须填。
  • RegisterAction-validation.xml中指定年龄必须不小于18。

验证框架的工作原理是,这3个验证条件都要运行,虽然按上面描述的那样,BaseAction-validation.xml中的验证规则优先于RegisterAction-validation.xml中的验证规则,但绝不是替代或者覆盖的关系,而是仅仅指定了先后顺序。

来运行测试一下,重新访问用户注册页面,帐号不要输入数据,名称和年龄正常输入,但是年龄输入的数据让他小于15,然后点击注册按钮,运行结果如下:

图10.8 验证器的优先顺序

10.7.2  验证器短路

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

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

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

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

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

 

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

这里要注意一点,就是DOCTYPE里面用的版本是Validator1.0.2,以前的版本是1.0,一定要注意,只有1.0.2的版本才能正确执行验证器短路。

       再次运行测试一下,运行结果如下:

图10.9  验证短路

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

 

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

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

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

12
3
分享到:
评论

相关推荐

    研磨Struts2配书视频对应的演示源代码

    2. **拦截器(Interceptors)**:Struts2的核心之一是其拦截器机制,它们在Action执行前后执行一系列预定义或自定义的操作。这些拦截器可以用于登录验证、日志记录、性能监控等。源代码中可能包含了不同类型的拦截器...

    研磨Struts2

    ### 知识点一:Struts2入门(MVC HelloWorld) #### 1.1 Struts2简介 ...以上就是关于“研磨Struts2”的主要知识点梳理,通过深入学习这些内容,开发者可以更好地掌握Struts2框架的核心技术和实践技巧。

    研磨struts2 高清版

    由于文件较大,我把这个文档切割为2部分,这是第一部分,请下载完第一部分后一定要下载第二部分,否则不能阅读。

    《研磨Struts 2》PDF版本下载.txt

    为了更好地理解和概括这份资料所涉及的知识点,我们先来了解一下Struts 2框架及其重要性,然后深入探讨《研磨Struts 2》这本书的主要内容。 ### Struts 2框架简介 Struts 2是Apache Struts的一个版本,它是用于...

    研磨Struts2配书视频对应的PPT

    《研磨Struts2》这本书是专门针对Struts2框架的学习指南,通过深入浅出的方式讲解了Struts2的核心概念和技术。其配套的PPT和视频旨在帮助读者更直观地理解书中的理论知识,并将其付诸实践。 在研读《研磨Struts2》...

    研磨Struts2 高清完整版.part2

    研磨Struts2 高清完整版,请和第一部分一起下载啊

    研磨struts

    Struts2是一个强大的Java web应用程序框架,用于构建...通过《研磨Struts2》,读者可以系统地学习Struts2框架的各个方面,从而熟练掌握这个强大的Web开发工具,提高开发效率,构建出结构清晰、易于维护的Java Web应用。

    研磨Struts2_12859679_高清完整版.part2.rar

    研磨Struts2_12859679_高清完整版

    研磨Struts2-高清-完整目录-2011年10月

    研磨Struts2-高清-完整目录-2011年10月,分享给所有需要的人

    Java工程师三大框架面试题.pdf

    Java工程师三大框架面试题.pdf

    第十章多功能敏感陶瓷.ppt

    【第十章多功能敏感陶瓷】 多功能敏感陶瓷是一种集多种传感功能于一体的新型材料,旨在满足现代科技发展和实际应用的需求。从20世纪80年代初开始,国内外科研人员开始研究这类陶瓷,以期将不同功能的传感器集成在一...

    研磨设计模式(完整带书签).part2.pdf

    本电子书一共两个压缩文档,本文件为part2. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,...

    研磨设计模式 PDF ZIP.001(三个压缩包)

    王斌:从事Java/JavaEE开发五年,系统架构师,精通Ejb、Struts、Spring、Hibernate、iBatis等框架技术,擅长设计模式和Eclipse插件开发。作为架构小组骨干,参与了国旅电子商务平台、南王酒庄等多个项目的开发,开发...

    研磨设计模式 PDF ZIP.002(三个压缩包)

    王斌:从事Java/JavaEE开发五年,系统架构师,精通Ejb、Struts、Spring、Hibernate、iBatis等框架技术,擅长设计模式和Eclipse插件开发。作为架构小组骨干,参与了国旅电子商务平台、南王酒庄等多个项目的开发,开发...

Global site tag (gtag.js) - Google Analytics