spring form 以及数据校验

来源:互联网 发布:网络信息安全的重要性 编辑:程序博客网 时间:2024/06/08 05:10

本文将讲述spring form的一些常用标签,以及基于org.hibernate.validator和javax.validation 的javabean数据校验。

1 在views/home/下面建一个index.jsp 在jsp头部引入 <%@ taglib prefix="sf" uri="http://www.springframework.org/tags/form"%> 然后写一个form表单。该表单每个标签下面都有一个  <sf:errors path="" /> 标签 这个标签是用来接收该属性的错误信息的

<sf:form method="POST" action="login" commandName="user">用户名:<sf:input path="name" /><sf:errors path="name" /><br/>密码:<sf:password path="password" /><sf:errors path="password" /><br/>年龄:<sf:input path="age" /><sf:errors path="age" /><br/>邮箱:<sf:input path="email" type="email"/><sf:errors path="email" /><br/>博客:<sf:input path="blogUrl"/><sf:errors path="blogUrl" /><br/><input type="submit" value="提交"></sf:form>
注意 form表单有一个commandName 属性,这个属性必须与跳转到views/home/index.jsp的controller中的model的其中一个属性key一致.这句话有点绕。我将贴出代码详细讲解。假如我是在下面的controller跳转到views/home/index.jsp这个页面的。(读一些代码中的注释)

@RequestMapping("/")public String home(Model model){model.addAttribute("user", new User());//这里的key "user" 与下面返回的jsp页面form表单的commandName属性对应,那么该form表单将展示  new User() 的数据//如果jsp页面表单的commandName属性在此model中找不到对应的key则jsp页面将会报错return "home/index";}


2 新建一个实体类 user

public class User {@NotBlank(message="用户名不能为空")//此注解来自于org.hibernate.validator@Length(min=0,max=15,message="用户名必须介于0-15位")//此注解来自于org.hibernate.validatorprivate String name;@NotNull(message="密码不能为空")//此注解来自于javax.validation@Size(min=6,max=12,message="密码必须介于6-12位")//此注解来自于javax.validationprivate String password;@NotNull(message="年龄不能为空")@Digits(fraction = 0, integer = 2,message="年龄不能超过两位数,且不能是小数")@Min(value=0,message="年龄不能小于0")@Max(value=99,message="年龄不能大于99")private int age;@Email(message="邮箱格式不正确")//此注解来自于org.hibernate.validator@NotNullprivate String email;//邮箱@URL(message="博客地址不正确")//此注解来自于org.hibernate.validatorprivate String blogUrl;//博客地址//省略setter 和 getter//将下面三个方法的重写交给org.apache.commons.lang3.builder这个包@Overridepublic boolean equals(Object that) {return EqualsBuilder.reflectionEquals(this, that,"password","name");}@Overridepublic int hashCode(){return HashCodeBuilder.reflectionHashCode(this,"password","name");}@Overridepublic String toString(){return ReflectionToStringBuilder.toString(this);}}

3 新建一个接收form表单数据的controller

@RequestMapping("login")public String login(@Valid User user,Errors errors){//这里user要用@valid注解if(errors.hasErrors()){//如果验证有错,在控制台打印所有错误信息 并返回原表单页面List<ObjectError> list = errors.getAllErrors();for(ObjectError oe : list){System.out.println(oe.getDefaultMessage());}System.out.println(errors.getAllErrors());return "home/index";}return "home/other";}

4:验证结果 输入表单信息,点击提交 ,返回错误信息


当然 这些错误信息还可以做的更完美,即结合国际化去设置错误信息,国际化这个知识点将在以后的文章中提到。








原创粉丝点击