我正在使用基于注释的验证,但对于其中一种表单,我无法使用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"/>
都没有效果。
答案 0 :(得分:42)
我不得不使用@ModelAttribute
来实现这一目标。因此表单前面有@ModelAttribute("copyCartForm") @Valid CopyCart copyCartForm, BindingResult result)
答案 1 :(得分:5)
我遇到了同样的问题。
我必须使用@ModelAttribute("attributeName")
来回复验证错误。
答案 2 :(得分:1)
我不确定为什么和我经历了很多,直到我弄明白,但你必须将你的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">
答案 3 :(得分:0)
您需要将此依赖项添加到您的 pom.xml 中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
</dependencies>