如果我在一个控制器中使用两个@InitBinder,那么它如何属于两个特定的BindingResult?

时间:2014-10-19 20:00:36

标签: spring-mvc

我的控制器类中的代码。

@Controller
@RequestMapping("/library/*")
public class HelloController {

    @Autowired
    @Qualifier("booksValidator")
    private Validator booksValidator;

    @Autowired
    @Qualifier("loginValidator")
    private Validator loginValidator;

    @InitBinder("login")
    private void initUserBinder(WebDataBinder loginBinder) {
    loginBinder.setValidator(loginValidator);
    }

    @InitBinder("book")
    private void initBooksBinder(WebDataBinder booksBinder) {
    booksBinder.setValidator(booksValidator);
    }

        @RequestMapping(value="welcome", method = RequestMethod.POST)
        public String printWelcome(@Validated @ModelAttribute("user") User user, BindingResult login, ModelMap model) {

        }

        @RequestMapping(value="add", method = RequestMethod.POST)
        public String addBooks(@Validated @ModelAttribute("books") Books books, BindingResult book, ModelMap model) {enter code here

        }
}

@InitBinder(" login")属于 - > BindingResult登录

@InitBinder(" book")属于 - > BindingResult书

我该怎么办? 请建议我...... :(

2 个答案:

答案 0 :(得分:1)

Spring控制器可以有多个@InitBinder方法。但是你没有正确使用注释的值。根据{{​​1}} javadoc关于value参数,指定模型属性名称或请求参数名称将init-binder方法限制为那些特定属性/参数

因此,在您的示例中,您应使用InitBinder个名称,而不是ModelAttribute参数名称,即BindingResult@InitBinder("user"),而不是{resp。} {{1} }和@InitBinder("books")

答案 1 :(得分:0)

我建议你把它分成两个独立的控制器。一个处理您的用户/登录,另一个处理书籍。因此,像LoginController那样具有用于登录的init绑定器,BooksController具有用于验证书籍的书籍验证器。