我创建了一个验证器来验证任何类的日期字段。我在控制器中自动连接了它的实例,并在控制器的方法中调用了它的 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 的验证器绑定为额外的验证器。
当你做binder.setValidator(dateValidator);
时,你用你的dateValidator
替换 Spring 的验证器。这就是 Spring 的内部验证停止工作的原因。
因此,如果您希望两个验证器都正常工作,则应删除此行并保留dateValidator.validate(...)
。如果你想有一个额外的验证器,你别无选择。