看登录控制器代码:
@RequestMapping(method=RequestMethod.POST,path="/login")
public void login(@Validated UserEntity user,
BindingResult result,
HttpServletResponse response) throws BindException{
if(result.hasErrors()){
response.setHeader("Location", "/account/login?edit");
return;
}
...
}
参数UserEntity user就是从表单接收到的参数,这个参数前面加了@Validated表示这个参数是需要验证的,而验证的结果,则保存在BindingResult result中,所以接下来的代码if(result.hasErrors())就判断,如果表单校验不通过,则跳转回表单编辑页面。
那么,程序是怎么判断表单的数据是不是合法的呢?这就要看UserEntity了:
public class UserEntity {
@Size(min=1,max=30,message="用户名长度必须是1~30个字符")
private String name;
@Size(min=6,max=30,message="密码长度必须是6~30个字符")
private String password;
}
除了@Size注解之外,还可以使用@Pattern注解,用正则表达式来校验。例如:
@Pattern(regexp="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9]+\\.[a-zA-Z]{2,4}",message="这不是有效的电子邮件格式")
private String email;
另外,message指定了出错时,返回的出错信息。要想这些信息显示在页面上,可以使用<sf:errors/>标签:
<sf:error path="email" cssClass="error" />
普通情况下,path设置为属性的名称就可以了。如果想要在一个表单里显示所有的出错信息,可以将path的值设为*;
本文介绍了一个登录控制器如何通过@Validated注解实现表单验证,包括使用@Size和@Pattern等注解确保用户名、密码及电子邮件的有效性,并展示了错误信息如何在页面上呈现。

2479

被折叠的 条评论
为什么被折叠?



