使用Springmodules的Commons Validator做驗證需要兩個bean(ValidatorFactory、BeanValidator)及兩xml文件(validator-rules.xml、validation.xml)的支持,ValidatorFactory用于制造BeanValidator,后者則是在程序中執行校驗的控制bean。validator-rules.xml中定義了各種驗證的規則,如字段不為空,字段輸入值必須為整數等等,在這里可以自己擴展驗證規則。而validation.xml中則定義了那些bean及bean中的哪些屬性字段需要驗證,使用哪些驗證規則。validate 分為兩級驗證,客戶端驗證(javascript)和服務器端驗證。以下是使用validate的步驟:
1. 在配置<action>-servlet.xml文件中聲明
ValidatorFactory 和
BeanValidator:
<!-- 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
周銳 閱讀(2431)
評論(0) 編輯 收藏 所屬分類:
Spring