我有一個Spring 2.x控制器,它擴展了SimpleFormController
,從Spring3開始已經棄用了,並且支持帶註釋的控制器。所以我試圖將其轉換爲使用@Controller
,@InitBinder
和@Valid
進行表單驗證。但是,我無法找到使用Spring 3.x控制器使用多個驗證器的方法。我該怎麼做呢?有沒有辦法在Spring 3註釋的控制器上使用多個Validator?
這裏是我的控制器的豆高清目前的樣子:
<bean name="/s/account" class="mywork.AccountSettingsController"
p:formView="forms/account"
p:successView="redirect:/app/s/account"
p:commandName="accountSettingsForm">
<property name="validators">
<list>
<ref bean="emailFormatValidator" />
<ref bean="uniqueEmailValidator" />
<ref bean="changeEmailValidator" />
<ref bean="passwordWithConfirmationValidator" />
<ref bean="changePasswordValidator" />
</list>
</property>
</bean>
這是一個網頁,它可以讓用戶改變他們的電子郵件地址和密碼控制器。驗證器bean是遺留代碼,但我猜測它們被分割成單獨的類以獲得更好的可重用性。
我想所有這一切進入控制器類本身,使用註釋:
@Controller
@Secured({BaseController.ROLE_LOGGED_IN})
@RequestMapping("/s/account")
public class AccountSettingsController extends BaseController {
private static final String FORM_URL = "/forms/account";
private static final String FORM_NAME = "accountSettingsForm";
@InitBinder(FORM_NAME)
public void initBinder(WebDataBinder binder) {
// TODO: how to inject > 1 validator for the form?
binder.setValidator(...);
}
@RequestMapping(method = RequestMethod.GET)
public ModelAndView get() {
ChangePasswordOrEmailForm form = new ChangePasswordOrEmailForm();
...
return new ModelAndView(FORM_URL, FORM_NAME, form);
}
...
}
至於我可以告訴大家,春季3假設之間存在1對1的關係:控制器 - 外形WebDataBinder-驗證。我可以創建一個綜合驗證器來彙總5個單獨的驗證器bean,並將Validator#supports()
和Validator#validate()
調用委託給它們,但這真的是最好的解決方案嗎?
謝謝,很高興聽到他們從Spring Web MVC 2.x中帶回這個選項! – 2015-02-25 18:39:08