Struts1.x的validator框架使用

  

一、配置
    在使用validator校验框架时候先要对工程进行配置,添加validator-rules.xml和validator.xml两个文件,将其放到WEB-INF/目录下(与web.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>
value值用来指定验证规则的文件,多个验证规则文件要用逗号分割。
配置验证规则:
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>validation.xml文件
这个文件是专门用来验证页面指定的Field。
1)根元素:
validator.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>

 

二、使用
一旦你已经配置了验证器插件,这样它可以加载你的Validator资源,你只需要延长org.apache.struts.validator.action.ValidatorForm而不是org.apache.struts.action.ActionForm。然后当validate方法被调用,操作的从Struts配置name属性用于装载当前窗体的验证。表单元素的名称在确认配置属性应与动作元素的名称属性。

例如:struts-config.xml文件中某个action的配置<action attribute="userForm" name="userForm" path="/User"  validate="true" parameter="o"
    input="/User.do?o=toAdd"
    type="com.struts.action.UserListAction">
   <forward name="toAdd" path="xxx"/>
  </action>
validation.xml文件中配置:<form name="userForm">
此时validation.xml文件中某个form配置要验证的表单,此表单对应struts-config.xml文件中action中name配置为“userForm”的action。
也就是form中的name要和action中的name相同

另一种方法是使用动作映射路径属性。在这种情况下,延长ValidatorActionForm代替的是ValidatorForm。该ValidatorActionForm使用动作元素从Struts配置应符合表单元素的名称在确认配置属性路径属性。

例如:struts-config.xml文件中某个action的配置<action attribute="userForm" name="userForm" path="/User"  validate="true" parameter="o"
    input="/UserList.do?o=toAdd"
    type="com.struts.action.UserListAction">
   <forward name="toAdd" path="xxx"/>
  </action>
validation.xml文件中配置:<form name="/User">
此时validation.xml文件中某个form配置要验证的表单,此表单对应struts-config.xml文件中action中path配置为“/User”的action。
也就是form中的name要和action中的path相同。

常见问题:
1、当一个Action中有多个ActionForward时,而且此时只需要对某个ActionForward进行验证,这时就得要求用到“动作映射路径”配置。
在struts-config.xml为某个action配置多次,而各自的path不同。validation.xml中的form配置要进行验证的action
如下: <action attribute="userForm" name="userForm" path="/User"  validate="true" parameter="o"
           input="/UserList.do o=toAdd"
           type="com.struts.action.UserListAction">
   <forward name="toAdd" path="xxx"/>
       </action>
       <action attribute="userForm" name="userForm" path="/UserEdit"  validate="true" parameter="o"
           input="/UserList.do o=toEdit"
           type="com.struts.action.UserListAction">
   <forward name="toAdd" path="xxx"/>
       </action>
  validation.xml中配置:
     <form name="/UserEdit">....</form>
如果使用的是spring1.2代理,Spring配置文件需要对每个action进行配置。
此时程序执行UserListAction时,只有执行“/UserEdit”相关路径时才会进行校验,执行“/User”时,不会进行校验。
因此对需要校验的ActionForward秩序在访问的时候访问路径由“/User”改为“/UserEdit”即可。
2、action中的input必需指定:input="/UserList.do?o=toAdd",当使用校验框架时,不指定input,程序不能正常执行。
3、<message-resources null="false" parameter="com.struts.ApplicationResources" />
   此配置是配置属性文件。 null="false" 必需指定,否则不会显示错误信息。

4、属性文件配置。
   英文属性文件名:ApplicationResources_en.properties
   中文转码前属性文件名:ApplicationResources_zh.properties
   中文转码后属性文件名:ApplicationResources_zh_CN.properties
   先写好中文转码前属性文件,然后用JDK生成对应的转码后文件。
   命令: 目录 native2ascii -encoding gbk A** A**CN

官方文档地址:http://struts.apache.org/1.3.10/faqs/validator.html
   详细配置信息里面有

 
 
<arg position="key中名称中指定的变量位置"  name="对应的验证规则名称"
         key="可以直接填入数值,也可填入变量表达式:${var:变量名}"
         resource="true/false"(代表是否从资源文件中读取信息,否则Key的值以参数的形式返回)>
        该标签可以用来替换<msg>标签中指定的变量

<var></var>定义一个变量的标签体,可以在里面具体设置变量的名称以及数值,该变量可以被用在上面的arg中,也是某一验证规则的需要的变量。
<var-name>对应Key里定义的变量名称</var-name>
<var-value>值</var-value>

<msg name="对应的验证规则名称" key="资源文件中定义的变量名称">这里定义了信息变量后,会替换默认定义的信息变量。
eg:
<msg name="mask" key="errors.mask.maxcount"/>
<arg position="0" key="label.code" />
<arg position="2" name="maxlength" key="${var:maxlength}" resource="false" />
<var>
 <var-name>maxlength</var-name>
 <var-value>30</var-value>
</var>
<var>
 <var-name>mask</var-name>
 <var-value>${letterDigital}</var-value>
</var>

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值