使用Common validator進行服務器、客戶端雙重驗證

驗證基礎準備:

選用common-validator 組件最初的原動力是他可以方便的實現客戶端和服務器端的雙重校驗,而且從Spring-module 0.5發佈後,對common-validator提供了良好的支持。

現在就讓我們來看看如何在Spring環境下進行方便的雙重校驗吧J

首先請下載Spring-module0.5和Common-validator組件包放在lib下(我這裏使用的是commons-validator-1.3.0.jar和spring-modules-validation.jarßspring-module0.5裏的包)。其次,我們要開始進行配置啦,首先配置一個validator,配置如下:

<bean id="validatorFactory"

class="org.springmodules.validation.commons.DefaultValidatorFactory">

<property name="validationConfigLocations">

<list>

<value>

classpath*:configure/validator/validator-rules.xml

</value>

<value>classpath*:configure/validator/validation.xml</value>

</list>

</property>

</bean>



<bean id="validator"

class="org.springmodules.validation.commons.DefaultBeanValidator">

<property name="validatorFactory" ref="validatorFactory" />

</bean>

當然,上面要注意的一點是validator-rules.xml和validation.xml。validator-rules.xml我們可以直接引用Struts驗證框架裏的validator-rules.xml,這個文件很容易就Copy到了,而validation.xml是我們所要自定義的,這裏我給出一個很簡單的例子:

<form name="tYxs">

<field property="password" depends="required,mask">

<arg0 key=" tYxs.password" />

<var>

<var-name>mask</var-name>

<var-value>^[0-9a-zA-Z]*$</var-value>

</var>

</field>

</field>

</form>

上面的文件指定了一個form名字爲newuserform,其中包含了一個字段password,規則是不可爲空和不能有除1-9,a-z以外的其他字符(熟悉Struts校驗的人不計其數,這個也是一樣的規則配置方法),多說一句,userForm.password爲國際化資源,在介紹國際化的文章中討論了J

使用Spring MVC進行表單提交的時候,SimpleFormControllor會默認調用Validator,我們使用的還是Spring提供的老方法,注入就可以了。下面給出一個SimpleFormControllor的簡單配置方法:

<bean id="tYxsbController"

class="mtn.gfkd.manage.controller.TYxsbController">

<property name="tyxsbdao">

<ref bean="tyxsbdao"/>

</property>

<property name="validator">

<ref bean="validator"/>

</property>

<property name="commandName" value="tYxs" />

<property name="commandClass" value="mtn.gfkd.manage.model.TYxs" />

<property name="formView">

<!-- tiles標記-- >

<value>manage.yxsb.insert</value>

</property>

<property name="successView">

<value>manage.yxsb.index</value>

</property>

</bean>

如上面的配置所示,我們將Validator和Form bean聲明在了控制器中,這樣它會在數據進行綁定後進行校驗。這裏有一個需要注意的問題,直接使用Spring-module的DefaultBeanValidator有一個規範,不然會出現Validator [org.springmodules.validation.commons.DefaultBeanValidator@1db8a73] does not support command class 這個莫名其妙的錯誤,呵呵,這個一般是我們沒有遵守它的命名規範,他的命名規範是你的commandClass的首字母必須改爲小寫,比如你的類名爲TYxs,在validator.xml文件裏的form名字必須聲明爲tYxs,這個問題爲查Spring源碼n次發現的bug阿,這個命名規則同時也影響到了commandName的設置了。

服務器端的校驗我們就配置完成了,現在我們所要關注的就是客戶端怎樣生成JS校驗了。

JSP文件我們所要做的工作很簡單了,就是如下:

<%@ taglib prefix="validator" uri="http://www.springmodules.org/tags/commons-validator"%>

<validator:javascript dynamicJavascript="false" formName="tYxs" staticJavascript="false" />

把如上代碼放在對應的JSP文件中,呵呵,當然你的formName要和validator.xml裏的名字設置成一樣的就好了,這樣在頁面就會自動生成校驗的javascript了。

最後要注意的就是怎樣寫form了,直接給出例子吧:

<form action="insertUser.htm" method="POST" enctype="multipart/form-data" name="newuserform" onSubmit="return validateTYxs(this)">

<spring:bind path=" tYxs.password">

<FONT color="red">

<B><c:out value="${status.errorMessage}"/></B> </FONT><input type="text" name="password " value="<c:out value="${status.value}"/>"/>

</spring:bind>

</form>

上面也是一個比較完整的使用Spring:bind 標籤的例子,給出了校驗錯誤信息,其中注意,生成的Javascript代碼的校驗函數名是form名字前加上validate,同時把首字母再換成大寫。

恩,這樣spring的校驗就應用在客戶端和服務器端了J
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章