【发布时间】:2012-03-07 10:00:40
【问题描述】:
我在春季为表单设置验证时遇到了一些问题。
我要验证的 bean 如下所示:
public class RegistrationForm extends ProjectXUser {
@NotEmpty
private String password2;
@NotBlank
@AssertTrue
private Boolean agreedToConditions;
...
ProjectXUser 继承自 BaseUser,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.xml 中添加了休眠验证器。
但是当我调试我的控制器时,我可以看到registrationForm包含我填写的值。但结果总是有0个错误。即使我在表单字段中输入了一些明确的错误输入。
【问题讨论】:
-
我猜你使用
来让你的 @Controller 工作,但是你的 RegistrationForm 类在扫描的包中吗? -
是的,我正在使用
。它正在扫描 org.x.y,而我的 RegistrationForm 位于 org.x.y.web.forms。所以它应该把它捡起来。 -
如果您使用
validator.validate(registrationForm)手动验证,是否有效? -
等等,您的表单“包含我填写的值”,但它没有错误?看起来您只是在验证字段是否具有值。
-
问题解决了吗?我有同样的问题,除了在我的情况下,当验证失败并且代码永远不会进入“if (result.hasErrors())”行时,它会返回“错误 400”。当必填字段不为空时,代码可以正常工作。
标签: spring hibernate spring-mvc bean-validation