1.将ActionForm改为ValidatorForm,若是DynaActionForm,则将struts配置文件中的form对象改为DynaActionForm,因为要使用Validator进行验证,只能是ValidatorForm或DynaValidatorForm两种。
2.将org.apache.struts.validator下的validator-rules.xml里的内容考过来,根据需要,将部分规则拷贝到/WEB-INF/validator-rules.xml里(该文件名随便取,一般和原文件名相同);再在/WEB-INF/下创建validator.xml文件,该文件就是配置那些需要验证的form元素。
介绍下validator_1_3_0.dtd中的元素:
global:全局定义,它类似于struts配置文件中的<global-forwards>元素,在它里面配置的validator, constant相当于全
局actionform。
validator:定义规则,如validator-rules.xml中的规则定义。
validator属性介绍:name为规则名,classname标签调用的类路径,method调用的方法名,methodParams参数类型,
msg为resources资源文件中的key,当验证未通过时,调用将显示该错误信息。
顺便提下,在validator-rules.xml的那些规则中,已经定义了默认的key,最好把里面的那些key-value值拷到resources国际化资源文件中。
constant:定义常量,怎么定义就不说了,和web.xml中的init-param定义一样,提下它的调用方式:${constantName}
formset:局部constant和form是设置
constant:定义和全局一样,只是它的作用域只能在该formset种使用。
form:定义form,其中属性name必须为要进行验证的那个ActionForm在name,这里不说DynaValidatorActionForm。
field:定义actionform中的属性,property=actionform中的属性名,depends为要使用的规则名(validator中
的name),page和indexedListProperty不是经常用不作介绍,感兴趣的话可以去
http://gstarwd.javaeye.com/blog/540321看看。
msg:用于更改默认的规则msg,属性name必须为form中的depends中的一种规则名,key为resources中
的key,bundle和resource不作介绍。
arg:嵌入msg中的值,属性name为要嵌入的规则名,key为要嵌入的值可以为var中定义的值以及resources中的
key,resource为是否检查resources文件中的key,position为要嵌入的第就个{?}(注意:
在validator_1_3_0.dtd之前是用arg0-arg4)
var:用来向验证规则传递参数,定义和常量一样,调用方法:${var:varName}
注意:在arg中不能调用常量作值,因为它会将该常量当作key值进行查找,会包个error消息
3.在struts配置文件中将
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>加入,以及配置resources文件。
到此基本可以了
如要在页面进行验证,修改如下:
将<form action="login.do" method="post">改为:
<html:form action="login.do" οnsubmit="return validateXXXXX(this)" method="post">该XXXXX为struts中的actionform的name,注意第一个字母改为大写。
添加:
<html:javascript formName="XXXXX"/>该XXXXX为actionform的name,无需修改第一个字母
<html:errors/> 打印输出错误信息。
注意:如要在界面进行验证,在配置web.xml时,<load-on-startup>标签,以保证validator在页面加载前加载,否则会出现如下异常:
java.lang.NullPointerException: Module 'null' not found