我的控制器类中的代码。
@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书
我该怎么办? 请建议我...... :(
答案 0 :(得分:1)
Spring控制器可以有多个@InitBinder
方法。但是你没有正确使用注释的值。根据{{1}} javadoc关于value参数,指定模型属性名称或请求参数名称将init-binder方法限制为那些特定属性/参数
因此,在您的示例中,您应使用InitBinder
个名称,而不是ModelAttribute
参数名称,即BindingResult
和@InitBinder("user")
,而不是{resp。} {{1} }和@InitBinder("books")
。
答案 1 :(得分:0)
我建议你把它分成两个独立的控制器。一个处理您的用户/登录,另一个处理书籍。因此,像LoginController那样具有用于登录的init绑定器,BooksController具有用于验证书籍的书籍验证器。