我在春天为表单设置验证时遇到了一些麻烦。
我想验证的bean看起来像这样:
public class RegistrationForm extends ProjectXUser {
@NotEmpty
private String password2;
@NotBlank
@AssertTrue
private Boolean agreedToConditions;
...
ProjectXUser继承自BaseUser,它还有一些属性也可以注释。
我的控制器看起来像这样:
@Controller
public class RegistrationController {
private static final String REGISTRATION_JSP = "registration";
@ModelAttribute("registrationForm")
public RegistrationForm getRegistrationForm() {
return new RegistrationForm();
}
@RequestMapping(value = { "/registratie/jaar", "registratie/proef" }, method = RequestMethod.GET)
public String year() {
return "registration";
}
@RequestMapping(value = { "/registratie/jaar", "registratie/proef" }, method = RequestMethod.POST)
public ModelAndView register(@Valid RegistrationForm registrationForm, BindingResult result) {
if (result.hasErrors()) {
return new ModelAndView(REGISTRATION_JSP);
} else {
return new ModelAndView("redirect:/registratie/success");
}
}
}
我的spring配置文件包含:
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
<mvc:annotation-driven />
我在spring文档中读到,如果类路径中存在jsr-303验证器,spring将自动检测并使用它。所以我在我的pom中添加了hibernate-validator。
但是当我调试我的控制器时,我可以看到registrationForm包含我填写的值。但结果总是有0个错误。即使我在表单字段中输入了一些明确错误的输入。
答案 0 :(得分:0)
如果出现错误,您需要在ModelAndView中返回结果。你要回来的只是一个空的mav。
答案 1 :(得分:0)
如果您的代码中的这一部分正在触发并重定向回您的注册页面
if (result.hasErrors()) {
return new ModelAndView(REGISTRATION_JSP);
}
然后你的JSR-303验证正在被提取。您需要在JSP页面上显示错误,如此
<form:errors path="password2" cssClass="error" />
其中cssClass="error"
是您要显示错误的CSS。它会自动放入<div>
。