`

关于Struts2中visitor校验器的解决方法

阅读更多

http://www.blogjava.net/cometlj/archive/2009/01/04/249760.html

 

这段时间重新开始拾起JAVA的学习,也是为了以后的工作打算,积累一些经验。

 

   记得开始的时候,学习Struts2中的输入校验,就对Vistor校验器情有独钟。首先,一般我们在提交表单的时候,对表单的各字段就要有校验的过程,实际部署过程中要分 客户端校验 和服务器端校验。 客户端校验使用rapid validation等第三方客户端校验框架就可以实现,而且比Struts2本身自带的客户端校验方式更好,但服务器端校验却可以分为好几种:

 

 

1.如果在Action中只有一个处理逻辑的话,可以重写ActionSupport中的validate()方法。

 

2.如果在Action中存在多个类似于execute的处理逻辑的话,我们可以重写validateXxx()方法(Xxx为不同的处理逻辑名称,例如有validateRegist()方法,就是处理Regist业务逻辑)

 

3.编写对应于Action的validate 的xml文件。这个应该是最为常用的一种解决方案了,但是有一个问题,Action众多,或者在Action中有多个对应一个或多个POJO的处理逻辑,那么这些xml文件就会随着Action文件和处理逻辑的增加而相应的增加,这显然不是个好的现象。  所以如果只是针对POJO来写相应的validate xml文件,无疑会好很多。  这就是Visitor校验器的功用了。

 

     很多和我一样的初学者可能手边都有一般李刚写的 《Struts 2 权威指南》,里面正好讲了visitor校验器,但是我照着书上讲的步骤重复做了N次都没有正确,于是乎在网上搜索了相关的文章,最后终于发现书上没有讲完整  (P280-P281)

 

以下我来举个例子:

 

  我建立了一个User的POJO,处理逻辑为UserAction, 测试页面为login.jsp

login.jsp

 1 <%@ page language="java" pageEncoding="UTF-8"%>
 2 <%@ taglib prefix="s" uri="/struts-tags"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 5 <html xmlns="http://www.w3.org/1999/xhtml">
 6     <head>
 7         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 8         <title>用户登录页面</title>
 9         <link href="utils/css/public.css" type="text/css" rel="stylesheet" />                
10     </head>
11     <body>        
12     <div id="all">
13         <div id="header">header</div>
14         <div id="content">
15         <s:form action="pro_login.do">
16             <s:textfield name="user.username" label="用户名称" />
17             <s:password name="user.userpwd" label="登录密码" />
18             <s:submit value="登 录" />
19         </s:form>    
20         </div>
21         <div id="footer">footer</div>
22     </div>            
23     </body>
24 </html>

那么我的Visitor校验器为
UserAction-validation.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 3 <validators>    
 4     <field name="user">
 5         <field-validator type="visitor">
 6             <param name="context">userContext</param>
 7             <param name="appendPrefix">true</param>
 8             <message></message>
 9         </field-validator>
10     </field>
11 </validators>

 

 -------------------------------------------------------------------

(注:context参数可以随便设置,只要保持一致就可以了)

 -------------------------------------------------------------------


User-userContext-validation.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
 3  "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
 4 <validators>
 5     <field name="username">
 6         <field-validator type="requiredstring">
 7             <message>请输入用户名称</message>
 8         </field-validator>
 9     </field>
10     <field name="userpwd">
11         <field-validator type="requiredstring">
12             <message>请输入密码</message>
13         </field-validator>        
14     </field>       
15 </validators>
16 



其中context参数将作为验证User类属性的文件名的一部分,如user属性返回一个User对象,那么用于验证User对象属性的文件名为User-abc-validation.xml

      这个文件要和User.class文件在同一个目录中。也就是要放到你的POJO文件相同的目录路径下,不然的话Visitor校验器就不会起作用。

     这个就是李刚老师没有写全的地方,附加个项目截图就更为清楚了。



分享到:
评论

相关推荐

    Visitor校验器 域对象级别上验证(完整示例源码)

    struts2中Visitor校验器以及域对象级别上验证和使用上下文优化的使用,我自己写的一个完整代码,详细的展示了如何使用Visitor校验器以及怎样在域对象上验证和注意事项,代码解压后可以直接部署到MyEclipse上运行,...

    struts2校验器类型详解

    在探讨Struts2校验器之前,我们首先需要了解这些校验器是如何被定义和集成到框架中的。如文中所述,Struts2的内建校验器主要位于`xwork-2.0.4.jar`压缩包中的`default.xml`文件里。这个文件定义了一系列常用的数据...

    Struts2学习文档

    - **6.5.9 visitor校验器** - **实现方式**:通过访问者模式来进行校验。 - **6.5.10 conversion转换校验器** - **实现方式**:检查字段是否能成功转换为目标类型。 - **6.5.11 stringlength字符串长度校验器** ...

    Java实训教程 Java软件开发实战 Java开发框架介绍 struts2_7_数据验证 共56页.pptx

    除了基本的手动编程和框架内置验证外,Struts2还支持更高级的数据验证用法,如自定义校验器和visitor校验器的应用方法等。 1. **自定义校验器**: - 可以通过扩展Struts2提供的校验器类来自定义验证规则。 - 适用...

    JavaEye论坛热点月报 总第8期

    - **关于Struts2中visitor校验器的解决方法**:针对Struts2框架的验证机制,特别是visitor校验器的使用方法和常见问题的解决方案。 3. **其他技术** - **g1安装Android软件详细攻略**:为Android开发者提供了...

    超级有影响力霸气的Java面试题大全文档

    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 16、sleep() 和 wait() 有什么区别? sleep是线程类(Thread)...

Global site tag (gtag.js) - Google Analytics