1.Validator框架的使用
在struts中除了自己定义validate校验方法以外,还可以使用一个功能十分强大的框架帮我们实现校验步骤,那就是Validator框架
。Validator框架是一个完整的架构,struts只是引用它而已。但是使用起来还是非常便利的。
首先与struts一同导入的jar包中就有一个commons-validator的jar包。所以我们不需要再去另外找validator的资源包,只要引入
两个配置文件即可。在struts的struts-mailreader范例的WEB-INF夹内就含有这两个文件,分别是validator-rules.xml和
validation.xml。其中validator-rules.xml中的配置一般不需要改动。我们在validation.xml文件中按需求进行配置就可以了。在
此之前,需要告诉struts我们引入了validator框架。具体做法就是在struts-config.xml文件中插入pulg-in节点。默认范例:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
value中的路径为两个validator配置文件的实际存放路径。
接下来把需要用validator校验的formbeen修改一下。让它不要继承ActionForm,而是继承ValidatorForm。同时它不能重载
validate方法。当然,你也可以不这么,而是在validate方法中自己调用Validator框架。对初学者来说是没有必要的。
之后就只要在validation.xml中进行设置了。
一个很简单的配置
<formset>
<form name="LogonForm">
<field property="name" depends="required">
<arg0 key="customer.name"/>
</field>
</form>
</formset>
<form>元素中的name属性设置的是要校验的FormBeen名称,需要和struts-config.xml中相应<from-been>元素定义的name属性的值
相同。
field元素定义的就是要校验的各个表单元素了。property为表单元素名,要注意的是,校验生成的错误信息保存的名字也是这个
property定义的名字。depends是依赖规则,具体规则在validator-rules.xml文件中。根据需要寻找即可。arg0指的是在国际化资
源文件中定义的语句要插入的参数。例如国际化资源文件中定义了一个required的默认错误提示:errors.required={0} is
required.那么agr0会先从国际化资源文件找customer.name对应的值,然后放入errors.required对应的{0}的位置。最后显示出的
就是name is required。如果资源文件中某条错误提示参数有多条,那么可以定义相应的arg1、arg2。。或者直接定义arg,再增加
position属性来具体定位。
再看一个例子
<field property="name" depends="required,maxlength">
<arg0 key="customer.name"/>
<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
<var><var-name>maxlength</var-name><var-value>30</var-value></var>
</field>
这里多了一个var元素。即可以定义函数。<arg1 name="maxlength" key="${var:maxlength}" resource="false" />的意思是key值为一个具体的值,不再从资源文件中提取。而这个值来自var定义的maxlength对应的值,即var-value元素中的30。同时name属性指定的是该参数是属于哪个规则的。此处为maxlength规则。
接下来看一个相对复杂的校验器
<field property="password2"
depends="required,validwhen">
<arg key="prompt.password2"/>
<var>
<var-name>test</var-name>
<var-value>(*this*==user.password)</var-value>
</var>
</field>
这里用到了validwhen校验规则。这个规则一定要定义一个<var>元素,并且元素名称为test,值为一个比较表达式。而且注意格式
,this两边要有*号。这个规则的意思就是看那个比较表达式的结果是否为真,不为真则添加错误信息到request中。
vaidator框架还有许多校验器可以方便使用,例如email,date,以及mask(正则表达式)。
2.ValidatorActionForm
如果两个Action关联的是同一个ActionForm,但它们的校验规则可能不一样,在ActionForm中该如何编写validate方法?例如,增
加用户和修改用户时可以使用同一个Action,但是修改用户时不需要校验密码。
这个时候Form继承的就不是ValidatorForm了,而是ValidatorActionForm。
<form name="">中也不再是form的名字了,而是action路径。即<form name="/RegUser">这样的形式。这样对应不同的action,可
以进行不同的校验。
3.用Validator框架产生JavaScript代码
我们之前实现的校验都是在服务器端完成的,但Validator框架提供了一个方法可以生成JavaScript代码,使表单在客服端就可以进
行基本验证,实现的方法也很简单。
要使用Validator的JavaScript校验功能,要在jsp页面中使用struts的<html:javascript formName="xxx">标签,其中的xxx是某个
校验域的名称,并在需要验证的表单的onsubmit属性中调用"return validateXxx()"方法。validateXxx方法可以通过
<html:javascript>的method属性来改变。
如果要为ValidatorActionForm对应的表单生成前台的javascript校验代码,可以使用类似如下的代码:
<html:javascript formName=“/logon” />
其中的formName与校验域的名字完全一样,生成的javascript方法则是按formBean的名称来的。
Validator框架与struts应用
在struts中除了自己定义validate校验方法以外,还可以使用一个功能十分强大的框架帮我们实现校验步骤,那就是Validator框架
。Validator框架是一个完整的架构,struts只是引用它而已。但是使用起来还是非常便利的。
首先与struts一同导入的jar包中就有一个commons-validator的jar包。所以我们不需要再去另外找validator的资源包,只要引入
两个配置文件即可。在struts的struts-mailreader范例的WEB-INF夹内就含有这两个文件,分别是validator-rules.xml和
validation.xml。其中validator-rules.xml中的配置一般不需要改动。我们在validation.xml文件中按需求进行配置就可以了。在
此之前,需要告诉struts我们引入了validator框架。具体做法就是在struts-config.xml文件中插入pulg-in节点。默认范例:
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
<set-property property="stopOnFirstError" value="false"/>
</plug-in>
value中的路径为两个validator配置文件的实际存放路径。
接下来把需要用validator校验的formbeen修改一下。让它不要继承ActionForm,而是继承ValidatorForm。同时它不能重载
validate方法。当然,你也可以不这么,而是在validate方法中自己调用Validator框架。对初学者来说是没有必要的。
之后就只要在validation.xml中进行设置了。
一个很简单的配置
<formset>
<form name="LogonForm">
<field property="name" depends="required">
<arg0 key="customer.name"/>
</field>
</form>
</formset>
<form>元素中的name属性设置的是要校验的FormBeen名称,需要和struts-config.xml中相应<from-been>元素定义的name属性的值
相同。
field元素定义的就是要校验的各个表单元素了。property为表单元素名,要注意的是,校验生成的错误信息保存的名字也是这个
property定义的名字。depends是依赖规则,具体规则在validator-rules.xml文件中。根据需要寻找即可。arg0指的是在国际化资
源文件中定义的语句要插入的参数。例如国际化资源文件中定义了一个required的默认错误提示:errors.required={0} is
required.那么agr0会先从国际化资源文件找customer.name对应的值,然后放入errors.required对应的{0}的位置。最后显示出的
就是name is required。如果资源文件中某条错误提示参数有多条,那么可以定义相应的arg1、arg2。。或者直接定义arg,再增加
position属性来具体定位。
再看一个例子
<field property="name" depends="required,maxlength">
<arg0 key="customer.name"/>
<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
<var><var-name>maxlength</var-name><var-value>30</var-value></var>
</field>
这里多了一个var元素。即可以定义函数。<arg1 name="maxlength" key="${var:maxlength}" resource="false" />的意思是key值为一个具体的值,不再从资源文件中提取。而这个值来自var定义的maxlength对应的值,即var-value元素中的30。同时name属性指定的是该参数是属于哪个规则的。此处为maxlength规则。
接下来看一个相对复杂的校验器
<field property="password2"
depends="required,validwhen">
<arg key="prompt.password2"/>
<var>
<var-name>test</var-name>
<var-value>(*this*==user.password)</var-value>
</var>
</field>
这里用到了validwhen校验规则。这个规则一定要定义一个<var>元素,并且元素名称为test,值为一个比较表达式。而且注意格式
,this两边要有*号。这个规则的意思就是看那个比较表达式的结果是否为真,不为真则添加错误信息到request中。
vaidator框架还有许多校验器可以方便使用,例如email,date,以及mask(正则表达式)。
2.ValidatorActionForm
如果两个Action关联的是同一个ActionForm,但它们的校验规则可能不一样,在ActionForm中该如何编写validate方法?例如,增
加用户和修改用户时可以使用同一个Action,但是修改用户时不需要校验密码。
这个时候Form继承的就不是ValidatorForm了,而是ValidatorActionForm。
<form name="">中也不再是form的名字了,而是action路径。即<form name="/RegUser">这样的形式。这样对应不同的action,可
以进行不同的校验。
3.用Validator框架产生JavaScript代码
我们之前实现的校验都是在服务器端完成的,但Validator框架提供了一个方法可以生成JavaScript代码,使表单在客服端就可以进
行基本验证,实现的方法也很简单。
要使用Validator的JavaScript校验功能,要在jsp页面中使用struts的<html:javascript formName="xxx">标签,其中的xxx是某个
校验域的名称,并在需要验证的表单的onsubmit属性中调用"return validateXxx()"方法。validateXxx方法可以通过
<html:javascript>的method属性来改变。
如果要为ValidatorActionForm对应的表单生成前台的javascript校验代码,可以使用类似如下的代码:
<html:javascript formName=“/logon” />
其中的formName与校验域的名字完全一样,生成的javascript方法则是按formBean的名称来的。
Validator框架与struts应用