2007年5月30日 星期三

SpringSide1.0 SpringMVC中Validation功能實作

SpringMVC使用Commons-Validation
在SpringSide 1.0中使用SpringMVC作為Presentation Layer架構。
當中將MultiActionController進行了擴充,使其能應用在所有呈現層狀況。
而在Validation中使用了springmodules的validation模組,使其能完整的整合Commons-Validation。
因此若希望在SpringMVC中使用Commons-Validation的話。
只需進行以下設定:

<!-- 定义 Commons-Validator Factory
注意:当前版本的springmodules, validatorFactory不能定义在bookstore-servlet-->
<bean id="validatorFactory" class="org.springmodules.validation.commons.DefaultValidatorFactory">
<property name="validationConfigLocations">
<list>
<value>classpath*:conf/validator/validator-rules.xml</value>
<value>classpath*:conf/validator/validator.xml</value>
</list>
</property>
</bean>

<!-- 用"validators"作id,方便autowire到 web controllers -->
<bean id="validators" class="org.springmodules.validation.commons.DefaultBeanValidator">
<property name="validatorFactory" ref="validatorFactory"/>
</bean>

validator-rules.xml,validator.xml使用Commons-Validation或Struts的都知道這是幹嘛的!在此就不說明。
在上述的設定中,將Commons-Validation設定至Bean Id為validators中,可直接注入SpringMVC的設定。

SpringMVC使用一般的Validation
有時候validation邏輯太過複雜,以至Commons-Validation無法勝任,或可勝任,但設定可讀性相當低,
反而造成難以維護的窘境,這時可直接使用Spring本身的Validation機制,甚至可合併二個Validation一起使用。
Spring注設方式如下:
<bean name="/xxx.do" class="com.sample.web.controller.MyController">
<description>Validation範例</description>
<property name="methodNameResolver" ref="methodNameResolver"/>
<property name="commandClass" value="com.sample.to.MyForm"/>
<property name="commandManager" ref="myDao"/>
<property name="formView" value="page/my"/>
<property name="validators"> <bean id="myValidator" class="com.sample.validation.MyValidator"/> </property> </bean>
將自定的Validator注射進validators屬性中,注意在程式碼中validators是陣列型態,而在Spring中並無說明陣列應如何注射。
開發人員可參考上述的做法注射多個Validator進SpringMVC的Action中。


沒有留言: