Ответ 1
Мне пришлось использовать @ModelAttribute
, чтобы заставить это работать. Таким образом, форме предшествует @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)
Я использую проверку на основе аннотаций, но для одной из форм я не могу показать никаких ошибок с помощью тега form:errors
. Когда я отлаживаю метод, я вижу, что BindingResult
имеет ошибки, но по какой-то причине его не отображается в форме. Я в тупике, поскольку у меня есть работа над другими формами, но по какой-то причине у этой конкретной формы возникают проблемы. Любые указатели приветствуются.
Вот код от контроллера, у меня есть copyCartForm как @SessionAttribute, а также в контроллере:
@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST)
public String copyCart(@Valid CopyCart copyCartForm, BindingResult result) {
if (result.hasErrors()) {
logger.debug("errors in form" + result.toString());
return "copyshoppingcart";
} else {
...
...
return "redirect:/home";
}
}
В JSP я пробовал это:
<form:errors path="*" cssClass="formError"/>
а также:
<form:errors path="fieldName" cssClass="formError"/>
Ничего не работает.
Мне пришлось использовать @ModelAttribute
, чтобы заставить это работать. Таким образом, форме предшествует @ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)
Еще один подход. Если по какой-то причине вы не можете использовать @ModelAttribute("copyCartForm")
, когда используется следующее:
@RequestMapping(method=RequestMethod.POST)
public String post(@Valid CopyCart copyCartForm, BindingResult bindingResult, ModelMap modelMap) {
if (bindingResult.hasErrors()) {
modelMap.put(BindingResult.class.getName() + ".copyCartForm", bindingResult);
return "copyshoppingcart";
}
return "redirect:/home";
}
Я столкнулся с той же проблемой.
Мне пришлось использовать @ModelAttribute("attributeName")
, чтобы вернуть ошибку проверки.
Я не уверен, почему и я много страдал, пока не понял, но вы должны называть свой bean точно так же, как ваш класс bean. Поэтому copyCartForm должен быть просто copyCart.
@RequestMapping(params="action=Confirm Copy", method=RequestMethod.POST)
public String copyCart(@Valid CopyCart copyCart, BindingResult result) {
if (result.hasErrors()) {
logger.debug("errors in form" + result.toString());
return "copyshoppingcart";
} else {
...
...
return "redirect:/home";
}
}
Это также должно быть изменено в теге формы:
<form:form action="....." method="..." commandName="copyCart">