【发布时间】:2012-07-02 10:55:28
【问题描述】:
我正在尝试通过使用简单的登录用例在 Spring 3.0 中实现 JSR 303 bean 验证。问题是,如果我提交的表单没有任何值,则验证不会发生(即 BindingResult 方法 hasErrors() 总是返回“false”并打印 我很酷!。以下是代码 sn- p:
@Controller
public class AnnotatedController {
@RequestMapping(value = "login")
public String validateLogin(@Valid LoginForm loginForm, BindingResult result, HttpServletRequest request) {
if(result.hasErrors())
System.out.println("Got Errors !");
else
System.out.println("I'm cool !");
return "login";
}
}
bean 看起来像这样:
public class LoginForm {
@NotEmpty
private String userName;
@Size(min=2, max=3)
private String password;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
终于看到了:
<table>
<form:form action="login.htm" modelAttribute="loginForm">
<tr>
<td>User :</td>
<td><form:input path="userName" /></td>
</tr>
<tr>
<td>Password :</td>
<td><form:input path="password" /></td>
</tr>
<tr><td><input type="submit" value="Ok"> </tr>
</form:form>
</table>
我错过了什么?
【问题讨论】:
-
只是想验证一下——你能否确认一下你是如何配置 Spring-MVC 的,我假设你已经使用了
<mvc:annotation-driven/>或者你可能已经明确指定了 HandlerAdapter——如果你明确指定了handlerAdapter 您可能还需要明确指定验证器(JSR 303)。 -
@BijuKunjummen 是的,我已经使用
对其进行了配置。还有什么我应该在这里做的吗? -
是的,如果你使用的是mvc:annotation-driven,你不需要做任何其他事情。您能否还确认您的类路径中有 JSR 303 实现 - 比如 hibernate-validator jar 文件?
-
@BijuKunjummen 是的,我的 Eclipse Web 应用程序库中有 hibernate-validator-4.3.0.Final.jar 和 validation-api-1.0.0.GA.jar。
标签: java spring-mvc bean-validation