看登录控制器代码:
@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的值设为*;