Terry原创,转载请说明作者及出处。


使用平台:Eclipse3.2+MyEclipse5.01GA

首先,Validator验证框架最好要在Struts1.2下使用,当然在Struts1.1下也是可行的,只是在Struts1.2下能支持得更好。

在Struts-Config.xml配置文件里添加插件,或是把下面的文本内容复制到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>


在MyEclipse下建立validation.xml的步骤如下:
在项目的根目录处点击鼠标右键,选择新建“XML(Basic Templates)”,在弹出的窗口中选择“Create XML file from a DTD file”下一步,将文件目录设置到WEB-INF下,文件名取为“validation.xml”下一步;在这里点击“Select XML Catalog entry”选项,并选择KEY名为“-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN”的选项,下一步;此处已经不需要再设置什么,直接点击“Finish”完成validation.xml的建立,通过这样的建立文件,在编辑过程中输入"<"符号后,编辑器就会自动查找与当前结构匹配的Validator标签。


下面介绍一下validation.xml配置文件的标签:

<form-validation></form-validation>是总框架
<formset></formset>是对Form里的数据进行配置
<form name="ActionForm对应的名称"></form>对一个ActionForm里的数据进行验证配置
<field property="ActionForm里的属性名" depends="验证规则,可以是Validation-rules里定义好的也可以是自定义的验证规则">这里配置一个属性的验证内容
<arg0 name="对应的验证规则名称" key="可以直接填入数值,也可填入变量表达式:${var:变量名}" resource="true/false"(代表是否从资源文件中读取信息,否则Key的值以参数的形式返回)>
<var></var>定义一个变量的标签体,可以在里面具体设置变量的名称以及数值
<var-name>对应Key里定义的变量名称</var-name>
<var-value>值</var-value>
<msg name="对应的验证规则名称" key="资源文件中定义的变量名称">这里定义了信息变量后,会默认定义的信息变量。
在验证规则中大部分可以使用已经预定义好的规则,它们在validator-rules.xml里,当然我们自己也可以定义规则。


实例如下:
<form-validation>
    <formset>
      <form name="employeeActionForm">
      <field property="vname" depends="required,maxlength">
        <arg0 key="employee.name"/>
        <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
        <var>
          <var-name>maxlength</var-name>
          <var-value>10</var-value>
        </var>
      </field>
      <field property="vsex" depends="required,maxlength">
        <arg0 key="employee.sex"/>
        <arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
        <var>
          <var-name>maxlength</var-name>
          <var-value>5</var-value>
        </var>
      </field>
      <field property="vage" depends="required,integer,intRange">
        <arg0 key="employee.age"/>
        <arg1 name="intRange" key="${var:min}" resource="false"/>
        <arg2 name="intRange" key="${var:max}" resource="false"/>
        <var>
          <var-name>min</var-name>
          <var-value>1</var-value>
        </var>
        <var>
          <var-name>max</var-name>
          <var-value>100</var-value>
        </var>
      </field>
      <field property="vmoney" depends="integer">
        <arg0 key="employee.money"/>
      </field>
      </form>
    </formset>
</form-validation>


要想在ActionForm里应用上Validator框架,就必须继承ValidatorForm类;
在MyEclipse下新建ActionForm时可以将其SuperClass设置为“org.apache.struts.validator.ValidatorForm”
如果是已经建好的ActionForm要改为使用Validator验证需如下操作:
导入org.apache.struts.validator.ValidatorForm包,将类ActionForm扩展类从原先的ActionForm改为ValidatorForm
而原先的public ActionErrors validate(ActionMapping mapping,HttpServletRequest request)和
public ActionErrors validate(ActionMapping mapping, ServletRequest request)
以及Reset方法去除即可。


应用程序全局资源文件:ApplicationResources.properties
可以在文件里添加错误提示信息,格式为:
变量名:提示文本(注:若要使用中文信息则要在转换之前将中文的文本填写完,转换后文件名后需要加上_zh_CN才会被系统识别为简体中文)
内容如下:
employee.name=员工姓名
employee.sex=员工性别
employee.age=员工年龄
employee.money=期望薪金
errors.required={0}不能为空,请填写!
errors.integer={0}必需为一个整数值
errors.range={0}必需为1~100之间的一个数字
errors.maxlength={0}的最大数不能越过{1}!

注:若需要换行可以在文本后面加上"<br>";

以上的例子只是说明了资源文件的使用方法,但是如果就想这样来显示中文提示信息是不可行的,


转换的命令是:
native2ascii -encoding gb2312 ApplicationResources.properties ApplicationResources_zh_CN.properties

native2ascii命令是Java JDK目录下BIN目录里的一个可执行文件,若发现不能执行,请修改系统环境变量,即在Path变量里加入"X:\...\jdk1.5.1\bin;",修改完需要重新启动系统所配置的环境变量才可生效。
可将命令制作成批命令,注意:转换格式后,在工程里需要手动刷新文件,否则项目不会识别你所做的改动


到这里Validator验证框架的所有配置已经完成此时你只要在页面相应位置放入<html:errors/>标签即可显示,这样是将所有的错误在同一个地方显示,若想实在在每个输入控件后面显示错误提示,就必须手动设置标签的属性,如:<html:errors property="XXX">;
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1681576



久久不醉