关于Spring中Commons Validator的使用说明

spring的validate验证需要两个bean( ValidatorFactory BeanValidator)及两xml文件( validator-rules.xml validation.xml)的支持, ValidatorFactory用于制造 BeanValidator,后者则是在程序中执行校验的控制bean。 Validatorrules.xml中定义了各种验证的规则,如字段不为空,字段输入 值必须为整数等等。 Validation.xml中则定义了那些bean及bean中的哪些属性字段需要验证,使用哪些验证规则。validate 分为两级验证,客户端验证( javascript)和服务器端验证。以下是使用validate的步骤:
1.       在配置文件中声明 ValidatorFactory 和 BeanValidator:
 
< bean  id = "validatorFactory" class = "org.springmodules.commons.validator.DefaultValidatorFactory" > -----
             < property name = "validationConfigLocations" > -----
               < list >
                      < value > /WEB-INF/validator-rules.xml </ value >
                      < value > /WEB-INF/validation.xml </ value >
                 </ list >
             </ property >
        </ bean >
        < bean id = "beanValidator"
class = "org.springmodules.commons.validator.DefaultBeanValidator" > -------
             < property name = "validatorFactory" >
                     < ref bean = "validatorFactory" />   --------
             </ property >
  </ bean >
 
     声明 validatoFactory 这里我们使用spring 的 DefaultValidatorFactory
     定义其 validationConfigLocations属性,将 validator-rules.xmlvalidation.xml传入
     声明 beanValidator 这里我们使用spring的 DefaultBeanValidator
     在其属性中指明要使用的 validatorFactory 。这里我们使用刚刚定义的 validatorFactory
 
2.       在需要进行验证的controller(即要使用form表单或者command的controller)中声明validate。
 
<bean id=" xxxxController" …… >
<property name=" commandName" value=" userCommand" />  -----
<property name=" commandClass" value=" com.resoft.User" />   -----
<property name=" validator" ref=" beanValidator" />   -------
     ……
</bean>
 
     commandName 用于指明需要验证的 command的名字,这个名字必须和 validation.xml中< form name = " xxxxx " > 所写的名字保持一致。
     commandClass用于指定这个 command的类型。其必须与你 jsp提交的 form最后形成的 command类型相一致。
     声明该 controller使用 validator,这里将我们刚刚定义的 beanValidator传入进去。
 
3.       validation.xml文件中,定义你要校验的 formbean(或者说是 command) ,定义这个 bean中有哪几个 field需要验证,使用何种规则验证。( 注意:这里定义的 form name 必须和前面 controller 中定义的 commandName 保持一致)以下是几种常用的验证示例:
 
< form-validation >
< formset >
< form name = " userCommand " > -----
               < field property = "userId" depends = "required" > -----     
                   < arg0 key = " 用户代码 " /> -------                                           
               </ field >    
                                                                
①     这里是定义要验证的 bean 的名字,要求去上面定义的 commandName 相同
②     这里定义要验证的 bean 属性为 userId 使用规则为 required ( 不为空 )
③    这里定义的是显示信息, arg0 表示位置 0 的显示信息,显示 key 所标明的信息 (如果你还有多个信息就用 arg1 arg2 等)出错信息将会显示为:   用户代码 不能为空  
 
 
< field property = "age" depends = "required,integer,mask" > -----
                   < arg0 key = " 年龄 " />
                   < msg name = "mask" key = "errors.negative" /> -----
                   < var >
                      < var -name > mask </ var -name >
                      < var -value > ^[1-9] </ var -value > -------
                   </ var >
        </ field >
 
①    mask 标记验证,使用正则表达式来约束表单输入值。(如:只能输入数字,字母或指定的字符)
②    msg 标签用来定义 验证规则和出错信息的关联,这里表示当出现 mask 校验失败时,显示 errors.negative 指明的信息。
      整个<var>标签就是用来定义具体的规则的,如<var-name>mask</var-name>指明是用于mask的规则,<var-value>^[1-9]</var-value> 表示只允许1-9这几个数字开头。
所以上面验证信息是年龄字段不可以为空,必须为整数,而且必须为1-9开头 也就杜绝了负数和零的情况。
          
               < field property = "birthday" depends = "required,date" > -----
                  < arg0 key = " 生日 " />
                  < var >
                       < var -name > datePatternStrict </ var -name > -----
                       < var -value > yyyy-MM-dd </ var -value >   -----
                   </ var >
        </ field >
        </ formset >
 
①   使用“date”加入对日期的格式的校验
         开始定义日期格式, var -name 必须写为 datePatternStrict
         定义你希望的日期格式如: yyyy-mm-dd  yy/mm/dd 等等都可以。
 
 
< field property = "startDate" depends = "required,date" >
              < arg0 key = " 开始日期 " />
              < var >
                   < var -name > datePatternStrict </ var -name >
                   < var -value > yyyy-MM-dd </ var -value >
                </ var >
       </ field >
       < field property = "endDate" depends = "required,date,compareTwoField" > -----
              < arg0 key = " 结束日期 " />
              < arg1 key = " 开始日期 " />  -----
              < var >
                   < var -name > datePatternStrict </ var -name >
                   < var -value > yyyy-MM-dd </ var -value >
            </ var >
            < var >
               < var -name > secondField </ var -name >   -------
               < var -value > startDate </ var -value >
            </ var >
       </ field >
 
         这里演示的是两个日期的验证,要达到开始日期不能晚于结束日期,加入 compareTwoField 验证规则
         定义第 2 个显示参数 agr1 “开始日期”
         加入一个 var var -name secondField (这个是在程序中写死的,必须写为 secondField
         var -value 定义为开始日期的属性名,如在本例中为 startDate
 
注:compareTwoField 是我们自己编写的一个校验规则,用于比较两个字段值大小。
 
4.   在jsp页面中定义错误信息显示语句:
 
< spring:bind path = "tableCrashDO.*" >   -----
    < c:if test = " ${not empty status.errorMessages}">
    < div class = "error" >   
        < c:forEach var = "error" items = " ${status.errorMessages}">
            < c:out value = " ${error}"escapeXml="false"/><br/>
        </ c:forEach >
    </ div >
    </ c:if >
</ spring:bind >
 
      这里的 path 必须要与传入该 jsp bean 的名字一样。如传入该 jsp 的数据 bean tableCrashDO ,path就应该写为 tableCrashDO .*
 
5 使客户端产生 javascript 代码:
 
< v:javascript formName = "tableCrashDO"     -----
staticJavascript = "false" xhtml = "true" cdata = "false" />
< script type = "text/javascript" src = " < c:url value = "scripts/validator.jsp" /> " ></ script >
 
      v:javascript 标签是 spring 的标签,定义在 spring-commons-validator.tld 其中 formName 必须与 validation.xml form name 保持一致。
 
如此以来,基本上可以算完成了 validate 的验证配置。
(特别注意: controller 中的 commandName validation.xml 中的 form name jsp v:javascript 标签的 formName 三者必须保持一致。)
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值