我一直在這花費好幾個小時,所以現在是時候提問了。如何顯示來自Spring驗證器的錯誤消息?
控制器
@RequestMapping(value="/articleHeaderEdit/{articleId}", method=RequestMethod.POST)
public ModelAndView submitHeader(@PathVariable Integer articleId, @ModelAttribute("screenObject") ArticleHeaderEditScreenObject articleHeaderEditScreenObject, @ModelAttribute("article") Article article, BindingResult bindingResult, Model model, Locale locale) throws Exception {
validator.validate(articleHeaderEditScreenObject, bindingResult);
ModelAndView modelAndView=new ModelAndView();
if(bindingResult.hasErrors()) {
initializeScreenObject(articleHeaderEditScreenObject, article, locale);
modelAndView.setViewName(WebView.ARTICLE_HEADER_EDIT_PAGE.getViewName());
} else {
modelAndView.setViewName("redirect:/article/" + articleId);
}
return modelAndView;
}
驗證
@Component
public class ArticleHeaderEditScreenObjectValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return ArticleHeaderEditScreenObject.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object validatedObject, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "title", "required.title", "Title is required.");
}
查看(僅適用於相關的HTML)
<form:form modelAttribute="screenObject" action="${screenObject.getFormAction()}">
<form:errors path="*" />
<form:errors />
<form:input path="title" />
<form:errors path="title" />
錯誤在那裏。我得到正確的看法,並通過調試再次檢查。儘管三種錯誤標籤都不起作用。當我提交頁面時,它會保留新輸入的數據,因此模型可以正常工作。
我看到很多人爲此而苦苦掙扎。一般來說,模型屬性在表單和控制器中有不同的名稱,但在這種情況下它們是相同的。任何想法還缺少什麼?
您可以發佈您的驗證碼? – 2012-03-27 15:25:20
我已經添加了驗證器並更新了代碼。我仍然試圖讓事情發揮作用。 – jacekn 2012-03-28 01:52:20
原因Spring對這篇文章中的第二個模型屬性感到困惑。當我從參數列表中取出@ModelAttribute(「article」)Article article時,錯誤顯示在頁面上。非常非常混亂的東西...... – jacekn 2012-03-28 02:15:03