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

关于Struts2中visitor校验器的解决方法
这段时间重新开始拾起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校验器的解决方法)