[英]@Valid (jsr 303) not working in Spring mvc 3.0
我試圖通過使用一個簡單的登錄用例在Spring 3.0中實現JSR 303 bean驗證。 問題是如果我提交沒有任何值的表單,驗證沒有發生(即BindingResult方法hasErrors()總是返回'false'並且打印我很酷! 。以下是代碼片段:
@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>
我錯過了什么?
在servlet上下文XML中添加<mvc:annotation-driven/>
為我解決了這個問題。
你缺少表單錯誤標簽。如
<table>
<form:form action="login.htm" commandName="logindetails">
<tr>
<td>User :</td>
<td><form:input path="userName" /></td>
<td><form:errors path="userName" /></td>
</tr>
<tr>
<td>Password :</td>
<td><form:input path="password" /></td>
<td><form:errors path="password" /></td>
</tr>
<tr><td><input type="submit" value="Ok"> </tr>
</form:form>
並且您還必須使用錯誤消息維護屬性文件。
NotEmpty.logindetails.userName = userName is required!
Range.logindetails.password= password value must be between 2 and 3
示例:單擊此處
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.