2015-11-22 54 views
0

我有一個顯示頁面處理程序,它顯示頁面。此方法不適用於表單提交,它只是顯示頁面。BindingResult在Display方法中不起作用(Spring MVC)

我的問題是,即使在顯示屏上,也會出現一些全局錯誤消息。由於顯示錯誤的唯一方法是將它們添加到一個BindingResult,我添加了一個型號/ BindingResult PARAM對我的顯示方法:

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

然後,讓我們說,我添加一個錯誤我BindingResult,

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

但這不起作用 - 所示的JSP沒有我的消息。這種方法適用於保存,但它不顯示,也許是因爲我沒有提交任何表單,這就是爲什麼我不能有一個BindingResult。

如何在不提交表單的方法中顯示一般錯誤?爲什麼BindingResult不能在這個Display方法中工作?

回答

0

您可能需要使用JavaScript來顯示錯誤

1

正如你已經注意到了,可惜BindingResult參數只能得到由框架填充綁定期間 - 即在你的命令對象獲取與請求參數填充點。

這是一個有點雜牌的,但你可以自己明確使用的主要預期通過添加參數模擬框架添加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現在對待錯誤如果他們發生了綁定,就會像添加一樣。

請注意,現在方法簽名中的參數將永遠不會被框架填充(因爲這是僅顯示控制器操作),因此在您的方法中定義它們可能更有意義。

+0

謝謝。我們的解決方案是保留一個自定義屬性,即「我們的消息」區域中以自定義方式顯示的「例外」。因此,對於一般的例外情況,我們避免使用Spring的現成錯誤標籤,它們不是來自Spring的Errors/BindingResult結構,而是來自我們自己的。 –

相關問題