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

转自:http://blog.163.com/hdhr_hanxin@126/blog/static/55659922200952605033246/

首先,一般我们在提交表单的时候,对表单的各字段就要有校验的过程,实际部署过程中要分 客户端校验 和服务器端校验。 客户端校验使用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


  1. <%@pagelanguage="java"pageEncoding="UTF-8"%>
  2. <%@taglibprefix="s"uri="/struts-tags"%>
  3. <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN"
  4. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <htmlxmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>
  8. <title>用户登录页面</title>
  9. <styletype="text/css">
  10. .errorMessage{
  11. font-weight:bold;
  12. color:red;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <s:formaction="pro_login.do">
  18. <s:textfieldname="user.username"label="用户名称"/>
  19. <s:passwordname="user.userpwd"label="登录密码"/>
  20. <s:submitvalue="登录"/>
  21. </s:form>
  22. </body>
  23. </html>

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


  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN""http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  3. <validators>
  4. <fieldname="user">
  5. <field-validatortype="visitor">
  6. <paramname="context">userContext</param>
  7. <paramname="appendPrefix">true</param>
  8. <message></message>
  9. </field-validator>
  10. </field>
  11. </validators>

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

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

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

User-userContext-validate.xml

  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
  3. "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
  4. <validators>
  5. <fieldname="username">
  6. <field-validatortype="requiredstring">
  7. <message>请输入用户名称</message>
  8. </field-validator>
  9. </field>
  10. <fieldname="userpwd">
  11. <field-validatortype="requiredstring">
  12. <message>请输入登录密码</message>
  13. </field-validator>
  14. </field>
  15. </validators>

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

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

你可能感兴趣的:(struts2)