BindingResult在显示方法中不起作用(Spring MVC)

时间:2015-11-22 23:52:55

标签: spring spring-mvc

我有一个显示页面的显示页面处理程序。此方法不适用于表单提交,只是显示页面。

我的问题是,即使在Display上,也会出现一些全局错误消息。由于显示错误的唯一方法是将它们添加到BindingResult,我在我的Display方法中添加了一个Model / BindingResult参数对:

public ModelAndView display(final HttpServletRequest request, 
                            @ModelAttribute("model") Model model, 
                            BindingResult bindingResult) {

然后,让我说我在BindingResult中添加了一个错误,

bindingResult.addError(new ObjectError("", "message");  

但这不起作用 - 显示的JSP没有我的信息。这种方法适用于保存,但它不在显示屏上,可能是因为我没有提交任何表格,这就是为什么我没有BindingResult。

如何在不提交表单的方法中显示一般错误?为什么BindingResult在这个Display方法中不起作用?

2 个答案:

答案 0 :(得分:1)

正如您所注意到的,遗憾的是BindingResult参数仅在绑定期间由框架填充 - 即在您的命令对象填充请求参数时。

这有点像kludge,但您可以通过使用预期的密钥显式添加参数来模拟向模型添加BindingResult参数的框架:

public ModelAndView display(MyModel model, BindingResult errors) {
    errors.addError(new ObjectError("", "message"));

    return new ModelAndView("myViewName", new ModelMap()
        .addAttribute("myModelKey", model)
        .addAttribute(BindingResult.MODEL_KEY_PREFIX + "myModelKey", errors));
}

Spring的<form:/> taglib现在会处理你添加的错误,就像它们在绑定时发生的一样。

请注意,现在方法签名中的参数永远不会被框架填充(因为这是一个仅显示控制器操作),所以在方法中定义它们可能更有意义。

答案 1 :(得分:0)

您可能需要使用JavaScript来显示错误