从View中访问Spring MVC BindingResult

per*_*ian 6 java data-binding spring spring-mvc

我正在寻找一种方法来访问BindingResult视图中的一个(在我的情况下是一个JSP页面).

我有以下控制器方法:

@RequestMapping(value="/register/accept.html",method=RequestMethod.POST)
public ModelAndView doRegisterAccept(
  @Valid @ModelAttribute("registrationData") RegistrationData registrationData,
  BindingResult bindingResult
) {

  ModelAndView modelAndView         = new ModelAndView();
  modelAndView.addObject("bindingResultXXX", bindingResult);
  modelAndView.setViewName("users/registration/register");
  return modelAndView;

}
Run Code Online (Sandbox Code Playgroud)

执行此操作时,将RegistrationData填充get并将错误存储在BindingResult.到现在为止还挺好.但是,我必须BindingResult手动将其添加到ModelAndView视图中以使其可见.

有没有办法自动添加BindingResult到模型中?我已经尝试将方法签名调整为

public ModelAndView doRegisterAccept(
  @Valid @ModelAttribute("registrationData") RegistrationData registrationData,
  @ModelAttribute("bindingResult") BindingResult bindingResult
) {
Run Code Online (Sandbox Code Playgroud)

我希望 - 作为任何其他参数 - BindingResult将被添加到键下的模型中bindingResult但不幸的是,这不起作用.

那么,有什么想法吗?

加成

我刚刚发现结果确实是使用密钥发布的

org.springframework.validation.BindingResult.<NAME_OF_MODEL_ATTRIBUTE>
Run Code Online (Sandbox Code Playgroud)

所以我想只是简单地用简单的名字添加它不会被春天的家伙鼓励?!

Mat*_*u L 1

您必须在表单视图中添加“错误”标签,如下所述:http ://static.springsource.org/spring/docs/3.0.5.RELEASE/reference/view.html#view-jsp-formtaglib-errorstag 。然后在你的控制器中,你只需进行一个测试:

if(bindingResult.hasErrors()) {
   ... display your form page again 
   (and "errors" tags will be populated by validation messages corresponding to each field) ...
}
else {
   ... here, you know that your RegistrationData is valid so you can treat it (save it I guess) ...
}
Run Code Online (Sandbox Code Playgroud)