Я потратил много часов на это, поэтому пришло время спросить.
Контроллер
@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;
}
Validator
@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" />
Ошибка есть.Я получаю правильное представление, и я дважды проверил путем отладки.Однако ни один из трех тегов ошибок не работает.Когда я отправляю страницу, она сохраняет вновь введенные данные, поэтому модель работает нормально.
Я вижу, как многие люди борются с этим.Как правило, это тот факт, что атрибут модели имеет другое имя в форме и в контроллере, но в этом случае они совпадают.Есть идеи, чего еще не хватает?