[Share]深度Struts之Validator

 在Struts中,Validator的作用非常大,他可以让用户从繁琐的页面验证工作中脱身,让页面验证工作放到配置文件里去做,Struts已经内置了如下这些我们经常使用的校验器:

· validateByte  检查值能够安全地转换为byte
· validateCreditCard  检查值是一个有效的信用卡号码
· validateDate 检查值是一个有效的日期
· validateDouble检查值能够安全地转换为double
· validateEmail  检查值是一个有效的Email地址
· validateFloat  检查值能够安全地转换为double
· validateInteger  检查值能够安全地转换为int
· validateLong检查值能够安全地转换为long
· validateMask检查值符合掩码规则,掩码采用规则表达式的方式
· validateMinLength 检查值的长度大于等于指定长度
· validateMaxLength检查值的长度小于指定长度
· validateRange检查值的有效范围在指定范围内
· validateRequired检查值不为null或长度>0
· validateShort 检查值能够安全地转换为short


这些校验器差不多已经囊括了大多数的需要验证的东西,今天我们大致回顾一下Validator如何在Struts中应用,有时间,我会展示一下实际项目中又是如何做的。

第一步:启用Validator插件

Validator插件已经内置于Struts中,但是默认状态下是没有被启用的,我们首先是要修改struts-config.xml文件,在文件最后(记住,是最后哟~!),增加如下代码来启用之:

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value
="/org/apache/struts/validator/validator-rules.xml,/WEB-INF/validation.xml" />
</plug-in>

第二步:生成ActionForm Bean

 java.lang.Object
  org.apache.struts.action.ActionForm
      org.apache.struts.validator.ValidatorForm
          org.apache.struts.validator.ValidatorActionForm   
java.lang.Object
  org.apache.struts.action.ActionForm
      org.apache.struts.action.DynaActionForm
          org.apache.struts.validator.DynaValidatorForm
              org.apache.struts.validator.DynaValidatorActionForm

由以上的继承关系,我们可以清楚地看到ValidatorActionForm/DynaValidatorActionForm都是继承于ActionForm,我们在实现自己的ActionForm Bean的时候,继承ValidatorActionForm/DynaValidatorActionForm即可。里面的内容与我们平时的ActionForm Bean无异。

第三步:配置Validator

现在,准备工作已经结束,我们可以根据第一步的配置,在WEB-INF下新建validation.xml文件,

< formset >
   
< form name ="/customer/cust001" >
       
< field property ="userSel" depends ="required" >
           
< arg0 key ="番号選択" resource ="false" />
       
</ field >

       
< field property ="recptNumInput" depends ="needvalidate,intRange" >
           
< arg0 key ="受付番号" resource ="false" />
           
< arg key ="prompt.min" position ="1" />
       
</ field >

   
< field property ="max" depends ="intRange,maxlength" >
   
< arg key ="prompt.max" position ="0" />
   
< arg name ="maxlength" key ="${var:maxlength}" resource ="false" position ="1" />
       
< var >
           
< var-name > maxlength </ var-name >
           
< var-value > 10 </ var-value >
       
</ var >
   
</ field >
   
</ form >
</ formset >


现在大致介绍一下各个元素的意思。
<form>不用说,就是定义是要验证哪个form的。
<field>是用来判断要验证哪个字段,depends属性,意思是该字段要依赖于哪个验证器。
<arg> 它的作用是替换信息中的某一部分,或者为验证方法提供必需的参数值。
            可以两种方式传入参数,第一,<arg0>,<arg1>...(最多四个) 第二,用<arg>里的position属性来设置传入的位置。
            key属性指定了一个资源文件的关键字,用来替换掉msg中需要替换的部分。如果你想设置一个明确的文本而不是资源文件的关键字,则可以将resource属性设置为false,这种情况下,可以将key属性设置为一个明确的文本,如“身份证”。
            name属性指定了msg将使用的校验规则名称,属性值必须是在validation-rules.xml 文件中定义的校验规则。
            注:对于一个field,需要的验证规则有时不止一个,例如depends="required,date",而多个验证规则中的每一个都需要出错时传入一些参数信息,如果它们所需要的参数个数、名称和顺序都相同,那么只要定义<arg0...、<arg1...等等即可。但是如果它们需要的参数的个数、名称和顺序不同怎么办,如果我们对于第一个输入参数只定义一个arg0,那么这个arg0用于哪个验证消息,因此这时必须通过arg标签的name属性来表示该参数所服务的验证。

field 元素包含的最后一个子元素是var 元素,field 元素可以包含0到多个var元素,var 元素可以设置该field所用到的校验规则的参数,var-name 参数名,var-value指定参数值。

<
msg> <arg> 相似,三个属性分别如下:

< field property ="dateStart" depends ="date,daterange" >
   
< msg name ="date,daterange" key ="80000" resource ="true" />            
   
< arg0 key ="開始日時" resource ="false" />
   
< var >
       
< var-name > date_mode </ var-name >
       
< var-value > YYYYY </ var-value >
   
</ var >    
</ field >

name属性与<arg> 的同名属性相同。
key属性指定了一个资源文件的关键字,当校验失败是,该关键字所代表的信息将会添加到ActionError 中。
resource属性<arg> 的同名属性相同。

这样,所有的概念都已经讲清楚了。下面看看实际项目是如何做的。

第一,可以为不同的业务逻辑配置多个validator文件。

<!-- ================= 業務名: ValidatorPlugIn・開始============================== -->
< plug-in className ="org.apache.struts.validator.ValidatorPlugIn" >
   
< set-property property ="pathnames"
                  value
="/WEB-INF/struts-config/validator-rules.xml,
                         /WEB-INF/struts-config/validation-login.xml,
                         /WEB-INF/struts-config/bankuser/validation-tekou.xml,
                         /WEB-INF/struts-config/bankuser/validation-kirin.xml,
                         /WEB-INF/struts-config/enduser/validation-qbs.xml"
/>
</ plug-in >
<!-- ================= 業務名: ValidatorPlugIn・終了============================== -->

第二,在每一个validation文件中可以自定义规则。

< validator name ="fullChar"
    classname
="com.ws.kokey.util.validator.UnitValidator"
    method
="validateCharacterFull"
    methodParams
="java.lang.Object,
        org.apache.commons.validator.ValidatorAction,
        org.apache.commons.validator.Field,
        org.apache.struts.action.ActionErrors,
        javax.servlet.http.HttpServletRequest"

    msg
="全角のチェック" >
</ validator >

具体实现,我们可以在定义的那个class里面写好。
好了,今天不能再写了,从上午都已经写到下午14:30了。下次再写。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值