2013-08-19 58 views
0

我無法獲得jsp頁面上顯示的彈簧驗證錯誤。這是我的代碼。在jsp頁面上,當我輸入一個空的名稱時,控制器代碼確實返回了一個帶有錯誤的ModelAndView,它只是不顯示在jsp頁面上。無法顯示彈簧錯誤<form:errors />

任何幫助將不勝感激。謝謝!

@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST) 
public ModelAndView editTag(@ModelAttribute("Tag") Tag tag) { 
    BindingResult result = new BeanPropertyBindingResult(tag, "tag"); 
    ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required"); 
    if (result.hasErrors()) { 
    return new ModelAndView("tag.edit").addObject("tag",tag).addObject("errors", result); 
    } 

    tagDao.merge(tag); 

    return new ModelAndView("redirect:/tags/listTags.htm"); 
} 




<form:form commandName="tag"> 
    <form:errors path="name"/><br /> 
    <form:input path="name" size="30" /> 
    ... 
</form:form> 

回答

1

你正在建設一個新的BindingResult,而已經有一個提供(並在後臺使用)的春天。只需在@ModelAttribute註釋參數後面添加BindingResult即可。然後您可以從結果中獲取模型並使用它來構造ModelAndView。

另請注意,ModelAttribute名稱(當前標記)與表單(標記)中使用的名稱不匹配。那兩個應該匹配。

像下面這樣的東西應該工作。

@RequestMapping(value = "/editTag.htm", method = RequestMethod.POST) 
public ModelAndView editTag(@ModelAttribute("tag") Tag tag, BindingResult result) { 
    ValidationUtils.rejectIfEmptyOrWhitespace(result, "name", "field.required", "Tag Name is required"); 
    if (result.hasErrors()) { 
     return new ModelAndView("tag.edit", result.getModel());  
    } 

    tagDao.merge(tag); 

    return new ModelAndView("redirect:/tags/listTags.htm"); 
} 
0

你可以試試這個

public ModelAndView editTag(@ModelAttribute("Tag") Tag tag,BindingResult result) { 
result = new BeanPropertyBindingResult(tag, "tag"); 
+0

我認爲如果用新實例覆蓋參數,錯誤將不會顯示在頁面上。嘗試做@SREEPRASAD答案,但省略實例化行。 – samuelgrigolato