【问题标题】:Access Spring MVC BindingResult from within a View从视图中访问 Spring MVC BindingResult
【发布时间】:2011-10-05 23:27:26
【问题描述】:

我正在寻找一种从视图中访问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 得到填充,错误存储在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 家伙不鼓励在普通名称下添加它?!

【问题讨论】:

  • 有趣的问题,它应该以某种方式呈现在视图中,例如在显示验证错误时

标签: java spring data-binding spring-mvc


【解决方案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) ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2018-05-19
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2016-11-24
    相关资源
    最近更新 更多