这段时间重新开始拾起JAVA的学习也是为了以后的工作打算积累一些经验
记得开始的时候学习Struts中的输入校验就对Vistor校验器情有独钟首先一般我们在提交表单的时候对表单的各字段就要有校验的过程实际部署过程中要分 客户端校验 和服务器端校验 客户端校验使用rapid validation等第三方客户端校验框架就可以实现而且比Struts本身自带的客户端校验方式更好但服务器端校验却可以分为好几种
如果在Action中只有一个处理逻辑的话可以重写ActionSupport中的validate()方法
如果在Action中存在多个类似于execute的处理逻辑的话我们可以重写validateXxx()方法(Xxx为不同的处理逻辑名称例如有validateRegist()方法就是处理Regist业务逻辑)
编写对应于Action的validate 的xml文件这个应该是最为常用的一种解决方案了但是有一个问题Action众多或者在Action中有多个对应一个或多个POJO的处理逻辑那么这些xml文件就会随着Action文件和处理逻辑的增加而相应的增加这显然不是个好的现象 所以如果只是针对POJO来写相应的validate xml文件无疑会好很多 这就是Visitor校验器的功用了
很多和我一样的初学者可能手边都有一般李刚写的 《Struts 权威指南》里面正好讲了visitor校验器但是我照着书上讲的步骤重复做了N次都没有正确于是乎在网上搜索了相关的文章最后终于发现书上没有讲完整 (PP)
以下我来举个例子
我建立了一个User的POJO处理逻辑为UserAction 测试页面为loginjsp
loginjsp
<%@pagelanguage=javapageEncoding=UTF%>
<%@taglibprefix=suri=/strutstags%>
<!DOCTYPEhtmlPUBLIC//WC//DTDXHTMLTransitional//EN
transitionaldtd>
<htmlxmlns=>
<head>
<metahttpequiv=ContentTypecontent=text/html;charset=utf/>
<title>用户登录页面</title>
<linktype=text/cssrel=stylesheet/>
</head>
<body>
<divid=all>
<divid=header>header</div>
<divid=content>
<s:formaction=pro_logindo>
<s:textfieldname=userusernamelabel=用户名称/>
<s:passwordname=useruserpwdlabel=登录密码/>
<s:submitvalue=登录/>
</s:form>
</div>
<divid=footer>footer</div>
</div>
</body>
</html>
那么我的Visitor校验器为UserActionvalidationxml
<?xmlversion=encoding=UTF?>
<!DOCTYPEvalidatorsPUBLIC//OpenSymphonyGroup//XWorkValidator//ENvalidatordtd>
<validators>
<fieldname=user>
<fieldvalidatortype=visitor>
<paramname=context>userContext</param>
<paramname=appendPrefix>true</param>
<message></message>
</fieldvalidator>
</field>
</validators>
(注context参数可以随便设置只要保持一致就可以了)
UseruserContextvalidationxml
<?xmlversion=encoding=UTF?>
<!DOCTYPEvalidatorsPUBLIC//OpenSymphonyGroup//XWorkValidator//EN
validatordtd>
<validators>
<fieldname=username>
<fieldvalidatortype=requiredstring>
<message>请输入用户名称</message>
</fieldvalidator>
</field>
<fieldname=userpwd>
<fieldvalidatortype=requiredstring>
<message>请输入密码</message>
</fieldvalidator>
</field>
</validators>
其中context参数将作为验证User类属性的文件名的一部分如user属性返回一个User对象那么用于验证User对象属性的文件名为Userabcvalidationxml
这个文件要和Userclass文件在同一个目录中也就是要放到你的POJO文件相同的目录路径下不然的话Visitor校验器就不会起作用
这个就是李刚老师没有写全的地方附加个项目截图就更为清楚了
这样的话Visitor校验器就起作用了