本篇Validator验证框架文章是在结合孙卫琴<精通Struts:基于MVC的Java Web设计与开发>和实践的基于上总结出来的,希望能对大家有所帮助
1. 配置
目前使用的版本是Struts1.2.8(下载地址:http://struts.apache.org/download.cgi),里面有validator-rules.xml和validator.xml两个文件,在使用Validator之前,需要先配置一些东西。
1)必要的包:
将Struts发行包中的commons-validator.jar和jakarta-oro.jar
这两个文件放到Web应用的WEB-INF/lib目录中。
2)在struts-config.xml中设置插件:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
value值用来指定验证规则的文件,多个验证规则文件要用逗号分割。
3)配置验证规则:
Validator框架有两个重要的配置文件:
<1>“validation-rules.xml文件,
这个配置文件包好了一组可供应用程序使用的全局验证规则。
这个文件是所有应用程序都使用的,任何Struts应用程序也都能
使用。除非打算修改或扩展这组规则,否则无需修改这个文件!
注意1:需要在资源包(ApplicationResources.properties)中加上一下的“键-值”:
## label
label.userName=User name
label.password=Password
## key-value
errors.required={0} is required.
errors.minlength={0} can not be less than {1} characters.
errors.maxlength={0} can not be greater than {1} characters.
errors.invalid={0} is invalid.
errors.byte={0} must be a byte.
errors.short={0} must be a short.
errors.integer={0} must be an integer.
errors.long={0} must be a long.
errors.float={0} must be a float.
errors.double={0} must be a double.
errors.date={0} is not a date.
errors.range={0} is not in the range {1} through {2}.
errors.creditcard={0} is an invalid credit card number.
errors.email={0} is an invalid e-mail address.
## Errors
error.username.required=<li>Your ID is wrong.</li>
error.password.required=<li>Your password is wrong.</li>
errors.header=<h3><font color="red">Validation Error</font></h3>
errors.footer=<hr>
因为,验证出错的时候,系统会自动在资源包中查找对应的错误消息,
比如:required验证规则出现错误时,就会输出“errors.required”的值。
注意2:在Struts 1.2.8中,验证类使用的是:“org.apache.struts.validator.FieldChecks”,
以前使用的是“org.apache.struts.util.StrutsValidtor”,
只要是从struts 1.2.x发行包中拷贝的“validation-rules.xml”文件,就可以保证是正确的。
<2>“validation.xml文件
这个文件是专门用来验证页面指定的Field。
注意1:这个文件是由“<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_2_0.dtd">”来管理其语法的。
(因为这个没有找到,耽误了很长时间,每次起动服务器都抛出异常“must match DOCTYPE root "null"”)
2. 实现
这次就记录一下对页面上某个Field具体是如何验证的。
这个功能是通过validation.xml文件实现的,
其实,这个文件名可以是任意的,可以起成别的名字,比如:validators.xml,不过,也要相应修改struts-config.xml文件中的加入validator框架PlugIn中的value属性。这个value属性用来指定validator-rules文件和具体的验证文件。
1)根元素:
validators.xml文件的“根元素(Root)”是form-validation,
意味着整个文件的内容包含在“<form-validation>”和“</form-validation>”之间,
2)元素global:
这个东西包含constant子元素,用来定义一个全局的“验证限制”,
以便在这个文件的其他地方使用这些验证规则。
例如:
<global>
<constant>
<constant-name>userName</constant-name>
<constant-value>^\s*[\w-]{0,30}$</constant-value>
</constant>
<constant>
<constant-name>password</constant-name>
<constant-value>^\s*[.\w@#!$%^*()-]{6,20}\s*$</constant-value>
</constant>
<constant>
<constant-name>email</constant-name>
<constant-value>^\s*([A-Za-z0-9] (\.\w )*@([\w-] \.) \w{2,3})\s*$</constant-value>
</constant>
</global>
这个例子就定义了一个全局的验证规则,名字是“zip”,具体的规则由“constant-value”指出。
3)formset元素:
这个可能是这个文件最重要的元素了,
主要负责的就是指定对哪个Field进行验证以及验证规则。
例如:
<formset>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{6}$</constant-value>
</constant>
<form name="userLogin">
<field
property="userName"
depends="required,mask,minlength">
<arg0 key="label.userName"/>
<arg1 name="minlength" key="${var:minlength}" resource="false"/>
<var>
<var-name>mask</var-name>
<var-value>${userName}</var-value>
</var>
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
<msg name="mask" key="error.username.required"/>
</field>
</form>
</formset>
<1>在formset元素中仍然可以定义验证规则(“constant”),但是,它不是全局的!
这里定义了一个为“zip”的验证规则(这个例子与global的例子没有关系,不要混淆)。
<2>在formset元素中可以定义一个或多个“form”子元素,这个form子元素指的是“from-bean”,
name用于指定被验证的是哪个form-bean,具体的意思一会儿再提。
<3>form子元素中也可以包括一个或多个“field”子元素,这个用来指定这个form-bean中,
哪个field被


最新评论