Validator框架如今成为Jakarta的公共项目的一部分,Struts携带了Validator框架,主要是两个jar文件,jakarta-oto.jar和commons-validator.jar文件.前者提供了一组处理文本的类,具有文本替换过滤和分割等功能,后者提供了一个简单的,可扩展的验证框架,包含了通用的验证方法和验证规则.如果Struts使用Validator需要添加那两个jar文件到lib目录.Validator框架采用了两个基于XML的配置文件来配置验证规则,这两个文件是validator-rules.xml和validation.在Struts应用中,它们放在WEB-INF目录.
Validator-rules.xml文件包含了一组通用的验证规则,对所有的String都适用.一般的情况下没必要修改,除非需要修改或者扩展默认的规则.建议如果想扩展默认的验证规则,最好把自定义的客户化规则放在另一个XML文件中,这样当升级Validator框架版本的时候,也无需修改validator-rules.xml文件.因为这个XML是不推荐修改的,所以我只是简单的介绍一下具体的<validator>元素的几个属性,至于具体需要开发人员来开发的是validation的XML文件.<validator>元素的name属性指定验证规则的逻辑名,这个名字必须唯一.还有classname和method属性分别指实现验证规则逻辑的类和方法.msg属性指定来自Resource中的消息key,验证失败,根据这个消息Key去找匹配的消息文本.depends属性指定在调用当前验证规则之前必须调用其他验证规则.
Validation.xml文件是针对某个具体的Struts应用,需要开发人员来创建的,它可以为应用中的ActionForm配置所需要的验证规则,取代ActionForm类中编程的方式来实现验证.<form-validation>元素是validatin.xml文件的根元素,它包含两个子元素<global>和<formset>,<global>可以出现零次或者多次,而<formset>元素可以出现一次或者多次他们的DTD定义是:<!element form-validation(global*,formset+)>.<global>元素可以定义<constant>子元素,它用来定义常量表达式,在文件中其余地方可以应用这些常量表达式.<formset>元素包含两个子元素<constant>和<form>,<form>元素用于为表单配置验证规则,它的name属性指定了表单的名字.<form>包含一个或者多<field>子元素,用于配置表单中字段的验证规则.<field>的<msg>子元素指定验证规则对应的消息文本,该消息文本替代validator-rules.xml文件中为验证规则配置的默认的消息文本.<msg>元素的主要属性是:name指定验证规则的名字,key当resource属性为true的时候,key属性指定的消息key该消息key应该在Resource Bundle中存在.key属性直接指定消息文本.resource当此项为true的时候,表示使用来自ResourceBundle的消息.<field>元素还可以包括附加的子元素<arg0><arg1><arg2>用于替换符合消息中的参数.<field>元素元素还可以包含零个或者多个<var>元素,用来向验证规则传递参数.
Validator插件需要在Struts配置文件中配置ValidatorPlugIn插件如下:
<plug-in className=”org.apache.struts.validator.ValidatorPlugIn”>
<set-property
property=”pathnames”
value=”/WEB-INF/validator-rules.xml/WEB-INF/validation.xml”/>
</plug-in>
当应用启动时,Struts框架会加载ValidatorPlugIn插件,并调用它的init()方法,根据pathnames属性,加载相应的validator-rules.xml和validation.xml文件,把验证信息读入到内存中.
Validator框架不能用于验证标准的org.apache.struts.atcion.ActionForm类,如果要使用Validator框架,应该采用ActionForm的两个子类,validator包DynaValidatorForm和ValidatorForm类.DynaValidatorForm支持动态的ActionForm中使用Validator框架,ValidatorForm支持在标准的ActionForm中使用validator框架.无论是动态的还是标准的,它们的配置方法都一样.而且Struts的一些标签也可以和Validator框架协同工作,例如<html:errors>和<html:messages>Validator框架提供了对I18N的支持,无论是客户端验证,还是服务器验证.Validator框架都从应用ResourceBundle中获取错误信息.所以说它很好的支持的国际化.总结一下Struts应用中使用validator框架的步骤:
创建扩展ValidatorForm或者ValidatorActionForm类的ActionForm类,如果使用动态的ActionForm,则无需创建扩展DynaValidatorForm或者DynaBalidatorActionForm类的子类,可以直接进行.
在Struts配置文件中配置<form>和<action>元素.
把Validator框架使用的消息文本添加到应用的ResourceBundle中.
在Validation.xml文件中为表单配置验证规则.
在Struts配置文件中配置ValidatorPlugIn插件.
如果更深入的学习Validator验证框架,建议阅读孙卫琴的《精通Struts》一书,本人曾经从中受益匪浅,写文章的很多启发也来自该书.