自定义验证器停止弹簧内部验证

时间:2012-12-02 11:55:33

标签: java spring-mvc

我创建了一个验证器来验证任何类的日期字段。我在我的控制器中自动运行了它的实例,并在我的控制器方法中调用了它的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中的验证器绑定为额外的验证器。

1 个答案:

答案 0 :(得分:2)

执行binder.setValidator(dateValidator);时,将Spring的验证程序替换为dateValidator。这就是Spring的内部验证停止工作的原因。

因此,如果您希望两个验证器都有效,则应删除此行并保留dateValidator.validate(...)。如果你想要一个额外的验证器,你别无选择。