Validator 框架由Validator 校验类、Validator 配置文件、资源配置文件和JSP标签库组成。
1. Validator 校验类
Validator 框架的Validator检验类本身提供了14种默认的检验规则,这些校验规则是最常见的校验。
2. Validator配置文件
通常来说,Validator配置文件是指如下两个XML文件;
第一:Validator-rules.XML是校验规则配置文件,定义了应用程序中可以使用的Validator校验规则,换句话说,就是将所有可用的校验规则声明在Validator-rules.XML中等待被调用。
第二:Validation.XML是具体校验配置文件,将Validator-rules.XML中的校验和应用程序结合起来的配置文件,它的名称并不一定是“Validation.XML”,可以是由程序员随意指定,甚至可以不用该文件而直接在Validator-rules.XML中指定具体校验。但为了降低耦合,还是应该分出该配置文件。就struts框架和Validator框架协同工作来看,Validation.XML将和ActionForm建立映射来校验从页面传入的数据。
3. 资源配置文件
说得通俗一点,资源配置文件就是报错信息文件,是为了将校验的出错信息显示给客户端而使用的,就struts框架和Validator框架协同工作来看,可以认为,它就是struts的Resource绑定所指的资源配置文件。
4. JSP标签库
JSP标签库用于读取资源配置文件中的报错信息,并将其显示出来。Struts框架中许多与资源配置文件相关的标签都实现了这种功能。灵位,<html:javascript>标签可以直接从Validator框架的Validator-rules.XML中得到JavaScript的校验结果。
备注:
Validation.XML的主要元素和属性说明
Validation.XML以validator_1_0.dtd作为XML的头部文件,因此将以validator_1_0.dtd来约束其表达,并以<form-validation>作为其根结点。
作为真正的具体校验声明的实现,Validation.XML将所有具体校验声明套在<formset>元素之中,以<form>元素来表明一个ActionForm。通过<formset>元素可以做国际化校验的工作,它的language.country.和varian,3个属性允许为定义的每个<form>针对每个国家声明不同的校验规则。
◆ <form>元素的name属性与struts-config.xml中的配置命名有很大关系。
当需要校验的ActionForm继承于validatorForm时,<form>元素的name属性应该和struts-config.xm中声明一个ActionForm所给予的标识相匹配;
当需要校验的ActionForm继承于validatorActionForm时,<form>元素的name属性应该和struts-config.xm中提交的<action>元素的path属性相匹配;
主要是通过<form>元素和ActionForm进行绑定,为ActionForm中的每个字段提供声明校验的实现。
◆ <form>元素有多个<field>子元素,以此来实现第每个定义在ActionForm中变量属性的校验。
◆ <field>元素用property属性来指明ActionForm中的一个变量属性,因此property属性的内容应该与定义在ActionForm中的变量属性相匹配、
◆ <field>元素的depends属性指明了该属性所依赖的校验规则,该规则应该在Validator-rules.XML中被dingy8i,由于在Validator-rules.XML中为每个校验规则提供了从资源配置文件得到的报错信息,因此当所依赖的校验规则出错后,就会以该报错信息作为本校验规则出错的提示。Depends属性中的校验规则可以有多个,并以“,”分开。
◆ <field>元素的<arg0>.<arg1>.<arg2>.<arg3>4个子元素会作为校验信息显示的替换参数所用,它将替换本条校验规则报错所取得的报错信息的{0}{1}{2}{3}。
每个<argX>元素都有key,name和resource三个属性。
key属性指定了资源配置文件中的一个“键”,因此替换报错信息时也会从资源配置文件中得到<argX>的内容。
Name属性的内容应该是<field>元素的depends属性校验规则中的一个,它将指定为某个校验规则进行报错信息的替换。当然,name属性也可以不出现,这样框架默认就会以<argX>来替换校验规则所需要的报错信息。
若不需要使用配置文件中的信息来替换<argX>,而直接使用字面文字,那么就应该出现resource属性,并将它设置为“false”,这时key属性的内容就会直接作为字面文字来实现替换了。
◆ <msg>子元素允许<field>元素的校验规则提供另一条报错信息,而不是默认的从Validator-rules.XML得到的报错信息。<msg>属性同一拥有key.name,resource三个属性,它们的作用和<argX>元素的三个属性一样。
◆ <var>子元素允许为校验规则提供额为的值。因为通常来说,校验并不是简单的无值或固定值校验,而是需要通过外间传递过来的值进行判断,<var>元素就提供了这个功能。<var>通过它本身的<var-name>和<var-value>两个子元素来传入校验需要值。
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE form-validation PUBLIC
- "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
- "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
- <form-validation>
- <formset>
- <form name="loginForm">
- <field property="userName" depends="required,minlength">
- <arg0 key="login.userName" />
- <arg1 name="minlength" key="${var:minlength}"
- resource="false" />
- <var>
- <var-name>minlength</var-name>
- <var-value>6</var-value>
- </var>
- </field>
- <field property="userPassword"
- depends="required,minlength">
- <arg0 key="login.password" />
- <arg1 name="minlength" key="${var:minlength}"
- resource="false" />
- <var>
- <var-name>minlength</var-name>
- <var-value>6</var-value>
- </var>
- </field>
- </form>
- </formset>
- </form-validation>