从View中访问Spring MVC BindingResult

时间:2011-07-15 08:35:16

标签: java spring data-binding 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;

}

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

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

public ModelAndView doRegisterAccept(
  @Valid @ModelAttribute("registrationData") RegistrationData registrationData,
  @ModelAttribute("bindingResult") BindingResult bindingResult
) {

我希望 - 与任何其他参数一样 - BindingResult会在键bindingResult下添加到模型中,但不幸的是,它不起作用。

那么,有什么想法吗?

加成

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

发布的
org.springframework.validation.BindingResult.<NAME_OF_MODEL_ATTRIBUTE>

所以我想只是简单地用简单的名字添加它不会受到Spring家伙的鼓励吗?!

1 个答案:

答案 0 :(得分:1)

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

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) ...
}