Struts2中visitor校验器的解决方法
来源:优易学  2009-1-12 11:54:35   【优易学:中国教育考试门户网】   资料下载   IT书店
文章页内部300*250广告位
  这段时间重新开始拾起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校验器就起作用了。  

责任编辑:小草

收藏此页】【 】【打印】【回到顶部
等级考试课程列表页595*300
文章搜索:
 相关文章
计算机底部580*90广告
文章页右侧第一330*280广告
计算机文章页资讯推荐
热点资讯
文章页330尺寸谷歌广告位
资讯快报
热门课程培训