使用SimpleFormController時,您可以搭配一個Validator介面的實作,幫助您作基本的伺服端資料驗證工作,您可以設計一個通用的Validator,將之當作一個Bean注入給需要進行表單驗證的其它Bean物件。
org.springframework.validation.Validator有兩個必須實作的方法:
代碼:
public interface Validator {
public boolean supports(Class clazz);
public void validate(Object obj, Errors errors);
}
supports()方法回傳一個boolean值,表示是否支援對所傳入的物件進行驗證,只有在傳回true的情況下,才會使用validate()進行驗證工作,在validate()中,obj表示傳入的表單物件,您可以對它進行一些驗證,如果有錯誤的話,可以使用errors的reject()或rejectValue()等方法加入錯誤訊息,在後續的處理中,若errors中包括錯誤訊息,會回到getViewPage()所設定的頁面。
我們來看一個簡單的實作:
代碼:
package onlyfun.caterpillar;
import org.springframework.validation.Validator;
import org.springframework.validation.Errors;
public class LoginValidator implements Validator {
public boolean supports(Class clazz) {
return clazz.equals(LoginForm.class);
}
public void validate(Object obj, Errors errors) {
LoginForm form = (LoginForm) obj;
if(form.getPassword().length() < 4 ) {
errors.rejectValue("password", "less-than-four", null, "密碼不得小於四個字元");
}
}
}
驗證通常是在檢查資料的完備性、安全性等條件,像是檢查密碼的格式就是一例,至於使用者名稱與密碼是否正確,這該算是後繼的Action的工作,當然這只是一個建議,驗證要進行什麼還是在於您的需求。
搭配SimpleFormController,您只要在Bean定義檔中加入Validator的Bean定義,以及讓SimpleFormController參考到它即可,例如:
代碼:
....
<bean id="loginValidator" class="onlyfun.caterpillar.LoginValidator"/>
<bean id="loginAction" class="onlyfun.caterpillar.LoginAction">
<property name="commandClass">
<value>onlyfun.caterpillar.LoginForm</value>
</property>
<property name="validator">
<ref bean="loginValidator"/>
</property>
<property name="successView">
<value>success</value>
</property>
<property name="formView">
<value>form</value>
</property>
</bean>
....
validator屬性參考至loginValidator,只要有設定validator,SimpleFormController就會使用它。配合之前主題中表單登入的範例,您可以自行看看程式執行的結果。