spring mvc应用程序中的jsr-303验证没有验证

时间:2012-03-07 10:00:40

标签: spring hibernate spring-mvc bean-validation

我在春天为表单设置验证时遇到了一些麻烦。

我想验证的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个错误。即使我在表单字段中输入了一些明确错误的输入。

2 个答案:

答案 0 :(得分:0)

如果出现错误,您需要在ModelAndView中返回结果。你要回来的只是一个空的mav。

有关示例,请参阅:http://forum.springsource.org/showthread.php?117436-Spring-MVC-3-and-returning-validation-errors-to-page-from-Valid&highlight=bindingresult

答案 1 :(得分:0)

如果您的代码中的这一部分正在触发并重定向回您的注册页面

if (result.hasErrors()) {
    return new ModelAndView(REGISTRATION_JSP);
}

然后你的JSR-303验证正在被提取。您需要在JSP页面上显示错误,如此

<form:errors path="password2" cssClass="error" />

其中cssClass="error"是您要显示错误的CSS。它会自动放入<div>