posts - 431,  comments - 344,  trackbacks - 0

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

1.       在配置<action>-servlet.xml文件中声明ValidatorFactoryBeanValidator
<!-- validation -->
 <bean id="validatorFactory" class="org.springmodules.validation.commons.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.validation.commons.DefaultBeanValidator">
     <property name="validatorFactory" ref="validatorFactory"/>
 </bean>
①     声明validatoFactory 这里我们使用DefaultValidatorFactory
②     定义其validationConfigLocations属性,将validator-rules.xml和validation.xml传入
③     声明beanValidator 这里我们使用DefaultBeanValidator
④     在其属性中指明要使用的validatorFactory 。这里我们使用刚刚定义的validatorFactory
这里需要注意的是随着Springmodules版本的不同,DefaultValidatorFactory和DefaultBeanValidator的包路径有可能不同。

2.       在需要进行验证的controller(即要使用form表单或者command的controller)中声明validate。
<bean id="compoundMainController" class="com.founder.action.CompoundMainController">
   <property name="formView">
    <value>regcompound</value>
   </property>
   <property name="successView">
    <value>regcompound</value>
   </property>
   <property name="commandClass">
    <value>com.founder.domain.ChemicalInfo</value>
   </property>
   <property name="commandName">
    <value>chemicalInfo</value>
   </property>
   <property name="compoundService">
    <ref bean="compoundService"/>
   </property>
   <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 name="chemicalInfo">
            <field property="saltForm" depends="maxlength,required">
                <arg0 key="chemicalInfo.saltForm.displayName" />
                <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
                <var>
                    <var-name>maxlength</var-name>
                    <var-value>30</var-value>
                </var>
            </field>
            <field property="saltNumber" depends="required">
                <arg0 key="chemicalInfo.saltNumber.displayName" />
            </field>
        </form>
而validator-rules.xml默认模板可以从下载的spring-modules-0.9.zip(当然你下的版本可能不同)里面的可以找到。

4.  jsp页面中定义错误信息显示语句:
<spring:bindpath="chemicalInfo.*">   -----①
    <c:iftest="${not empty status.errorMessages}">
    <div class="error">  
        <c:forEachvar="error" items="${status.errorMessages}">
            <c:outvalue="${error}"escapeXml="false"/><br/>
        </c:forEach>
    </div>
    </c:if>
</spring:bind>
①      这里的path必须要与传入该 jsp的bean的名字一样。如传入该jsp的数据bean叫chemicalInfo,path就应该写为chemicalInfo.*。

5使客户端产生javascript代码:
<v:javascriptformName="chemicalInfo"    -----①
staticJavascript="false" xhtml="true" cdata="false"/>
<script type="text/javascript" src="<c:urlvalue="scripts/validator.jsp"/>"></script>
 
①      v:javascript标签是spring的标签,定义在spring-commons-validator.tld 。其中formName必须与validation.xml中form的name保持一致。
posted on 2009-01-08 22:54 周锐 阅读(2423) 评论(0)  编辑  收藏 所属分类: Spring

只有注册用户登录后才能发表评论。


网站导航: