2012-12-02 75 views
2

我創建了一個驗證器來驗證任何類的日期字段。我在我的控制器中自動裝配它的實例,並在我的控制器的方法中調用它的validate()方法。一切工作正常。自定義驗證器停止彈簧內部驗證

@RequestMapping(value = "/{pan}",method=RequestMethod.POST) 
public ModelAndView submitIfPANpresents(@ModelAttribute("command") @Valid PortfolioBean portfolio,bindingResult result){ 
    dateValidator.validate(portfolio, result); 
    if(result.hasErrors()){ 
     System.out.println(result.getErrorCount()); 
     return new ModelAndView("portfolioview"); 
    } 
: 
} 

現在我在我的控制器中創建了一個方法來綁定自定義驗證器和WebDataBinder。我希望我沒有明確地調用validate()。

@InitBinder 
protected void initBinder(WebDataBinder binder) { 
    binder.setValidator(dateValidator); 
} 

仍然一切工作正常。

現在我評論說要從控制器的方法中調用validate()自定義驗證器並測試代碼。我只能看到自定義驗證器設置的錯誤。 Spring的內部驗證停止工作。

我在做什麼或錯過什麼錯?我的需要是,不要顯式調用validate(),並將xml中的驗證器作爲額外的驗證器進行綁定。

+0

某處我讀過「建立在註釋中的JSR 303不做任何事情當你注入了自己的驗證器」:(任何解決方案? –

+0

我可以使用aspectJ或其他方式嗎?我希望它自動運行一次只有配置。 –

回答

2

當你做binder.setValidator(dateValidator);時,你用你的dateValidator替換Spring的驗證器。這就是爲什麼Spring的內部驗證停止工作。

所以,如果你想兩個驗證工作,你應該刪除這條線,並保持dateValidator.validate(...)。如果您想要額外的驗證器,您別無選擇。