关于Spring中Commons Validator的使用说明

68 篇文章 0 订阅
53 篇文章 0 订阅


springvalidate验证需要两个beanValidatorFactoryBeanValidator)及两xml文件(validator-rules.xmlvalidation.xml)的支持,ValidatorFactory用于制造BeanValidator,后者则是在程序中执行校验的控制beanValidatorrules.xml中定义了各种验证的规则,如字段不为空,字段输入值必须为整数等等。Validation.xml中则定义了那些beanbean中的哪些属性字段需要验证,使用哪些验证规则。validate 分为两级验证,客户端验证(javascript)和服务器端验证。以下是使用validate的步骤:

1.      
在配置文件中声明ValidatorFactory

BeanValidator

 

<bean  id="validatorFactoryclass="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 这里我们使用springDefaultBeanValidator

④    
在其属性中指明要使用的validatorFactory 。这里我们使用刚刚定义的validatorFactory

 

2.      
在需要进行验证的controller(即要使用form表单或者commandcontroller)中声明validate

 

<bean id="xxxxController" ……>

<property
name="commandNamevalue="userCommand"/> 
—–

<property
name="commandClassvalue="com.resoft.User"/>  
—–

<property
name="validatorref="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="userIddepends="required">
—–

    

              
    
<arg0
key="用户代码"
/>
——-                                          

          
    
</field>
   

                                                                


   这里是定义要验证的bean的名字,要求去上面定义的
commandName
相同


   这里定义要验证的bean属性为
userId
,使用规则为
required(不为空)


   这里定义的是显示信息,arg0
表示位置
的显示信息,显示key
所标明的信息 (如果你还有多个信息就用
arg1arg2
等)出错信息将会显示为:
 用户代码
不能为空 

 

 

<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="startDatedepends="required,date">

              <arg0
key="开始日期"
/>

              <var>

              
   
<var-name>datePatternStrict</var-name>

              
   
<var-value>yyyy-MM-dd</var-value>

           
   
</var>

       </field>

       <field
property="endDatedepends="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 :o ut
value="${error}" escapeXml="false"/><br
/>

        </c:forEach>

    </div>

    </c:if>

</spring:bind>

 

①     
这里的path
必须要与传入该
jsp
bean的名字一样。如传入该jsp的数据bean
tableCrashDOpath就应该写为tableCrashDO.*

 

5
使客户端产生javascript代码:

 

<v:javascript
formName="tableCrashDO"    —–

staticJavascript="false"
xhtml="true"
cdata="false"/>

<script
type="text/javascriptsrc="<c:url
value="scripts/validator.jsp"/>"></script>

 

①     
v:javascript
标签是spring的标签,定义在spring-commons-validator.tld 。其中formName必须与validation.xmlformname保持一致。

 

如此以来,基本上可以算完成了validate的验证配置。

(特别注意: controller 中的commandName; validation.xml中的form name; jspv:javascript标签的formName三者必须保持一致。)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值