SSM框架笔记14:Spring MVC表单验证
2018-02-21 22:01
429 查看
Spring MVC表单验证
在Spring MVC中,表单验证有三种方法。
一、基本校验这种方法是基于handler的,优点是定义方便,缺点是不便于复用。1、两个接口:Errors/BindingResult,用来保存绑定错误信息。2、两个方法:errors.reject() / errors.rejectValue(),用来注册全局/字段级别的错误信息3、一个标签: <form:errors path=”*” />
案例演示:利用控制器实现表单校验
1、用户实体User
输入不合法数据,单击注册按钮:
输入合法数据,单击注册按钮:
二、自定义验证器1、实现Validator接口,定义用户验证器UserValidator
方法二、在Spring MVC配置文件里注册
4、创建addUser.jsp页面
5、在AddController里添加处理方法
三、JSR-303 风格校验JSR-303 是 Java 官方推出的一套 Validation 接口,Hibernate 给出了一个完整实现。
1、在pom.xml文件里引入JavaBean校验与Hibernate校验器
验证框中@NotEmpty、@NotBlank、@NotNull乍一看还是容易弄混的。@NotEmpty 用在集合类上面(不能为null或者长度为0)@NotBlank 用在String上面(忽略尾部空格,纯空格字符串认为是Blank的)@NotNull 用在基本类型上
在Spring MVC中,表单验证有三种方法。
一、基本校验这种方法是基于handler的,优点是定义方便,缺点是不便于复用。1、两个接口:Errors/BindingResult,用来保存绑定错误信息。2、两个方法:errors.reject() / errors.rejectValue(),用来注册全局/字段级别的错误信息3、一个标签: <form:errors path=”*” />
案例演示:利用控制器实现表单校验
1、用户实体User
package net.hw.spring.bean; import java.util.Date; public class User { private int id; private String username; private String password; private String telephone; public int getId() { return id; } public void setId(int id) { this.id = id; } 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; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", telephone='" + telephone + '\'' + '}'; } }2、起始页面index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>表单校验案例</title> </head> <body> <h3>表单校验案例</h3> <ol> <li><a href="/user/toRegister">注册</a></li> </ol> </body> </html>3、注册页面register.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <head> <title>注册</title> <script type="text/javascript"> function clearUsernameError() { var usernameError = document.getElementById("usernameError"); usernameError.innerHTML = ""; } function clearPasswordError() { var passwordError = document.getElementById("passwordError"); passwordError.innerHTML = ""; } function clearTelephoneError() { var telephoneError = document.getElementById("telephoneError"); telephoneError.innerHTML = ""; } </script> </head> <body> <form:form action="/user/register" modelAttribute="user"> <table border="0" cellpadding="5"> <tr align="center"> <td colspan="2"><h3>用户注册</h3></td> </tr> <tr> <td>用户名:</td> <td> <form:input path="username" onfocus="clearUsernameError()"/> </td> <td> <span id="usernameError"><form:errors path="username" cssClass="error" cssStyle="color:red"/></span> </td> </tr> <tr> <td>密码:</td> <td> <form:input path="password" type="password" onfocus="clearPasswordError()"/> </td> <td> <span id="passwordError"><form:errors path="password" cssClass="error" cssStyle="color:red"/></span> </td> </tr> <tr> <td>电话:</td> <td><form:input path="telephone" onfocus="clearTelephoneError()"/></td> <td> <span id="telephoneError"><form:errors path="telephone" cssClass="error" cssStyle="color:red"/></span> </td> </tr> <tr align="center"> <td colspan="2"> <input type="submit" value="注册"/> <input type="reset" value="重置"/></td> </tr> </table> </form:form> </body> </html>4、注册成功页面success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>注册成功</title> </head> <body> <h1>恭喜,注册成功!</h1> </body>5、用户控制器UserController
package net.hw.spring.webmvc; import net.hw.spring.bean.User; import org.springframework.stereotype.Controller; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * Created by howard on 2017/3/29. */ @Controller @RequestMapping("/user") public class UserController { @RequestMapping("/toRegister") public ModelAndView toRegister() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("register"); modelAndView.addObject(new User()); return modelAndView; } @RequestMapping("/register") public String register(User user, Errors errors) { String username = user.getUsername(); String password = user.getPassword(); String telephone = user.getTelephone(); if (username == null || username.equals("")) { errors.rejectValue("username", "1", "用户名不能为空"); } if (password.length() < 6) { errors.rejectValue("password", "2", "密码不能少于6位"); } if (!telephone.matches("^1[3|4|5|7|8][0-9]{9}$")) { errors.rejectValue("telephone", "3", "不合法手机号码"); } // 校验有错,返回注册页面 if (errors.hasErrors()) { return "register"; } // 校验无错,返回成功页面 return "success"; } }6、启动服务器,查看运行效果
输入不合法数据,单击注册按钮:
输入合法数据,单击注册按钮:
二、自定义验证器1、实现Validator接口,定义用户验证器UserValidator
package net.hw.spring.validator; import net.hw.spring.bean.User; import org.springframework.validation.Errors; import org.springframework.validation.Validator; /** * Created by howard on 2017/3/30. */ public class UserValidator implements Validator{ /** * 设置校验类 * * @param clazz * @return */ public boolean supports(Class<?> clazz) { return clazz.equals(User.class); } /** * 设置校验逻辑 * * @param target * @param errors */ public void validate(Object target, Errors errors) { User user = (User) target; String username = user.getUsername(); String password = user.getPassword(); String telephone = user.getTelephone(); if (username == null || username.equals("")) { errors.rejectValue("username", "1", "用户名不能为空"); } if (password.length() < 6) { errors.rejectValue("password", "1", "密码不能少于6位"); } if (!telephone.matches("^1[3|4|5|7|8][0-9]{9}$")) { errors.rejectValue("telephone", "1", "不合法手机号码"); } } }2、注册用户校验器方法一:在控制器里注册
方法二、在Spring MVC配置文件里注册
<mvc:annotation-driven validator="userValidator" /> <bean name="userValidator" class="net.hw.spring.validator.UserValidator" />3、修改index.jsp页面
4、创建addUser.jsp页面
5、在AddController里添加处理方法
package net.hw.spring.webmvc; import net.hw.spring.bean.User; import net.hw.spring.validator.UserValidator; import org.springframework.stereotype.Controller; import org.springframework.validation.DataBinder; import org.springframework.validation.Errors; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * Created by howard on 2017/3/30. */ @Controller @RequestMapping("/add") public class AddController { @InitBinder protected void init (DataBinder binder) { binder.setValidator(new UserValidator()); } @RequestMapping("/toAddUser") public ModelAndView toAddUser() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("addUser"); modelAndView.addObject(new User()); return modelAndView; } @RequestMapping("/addUser") public String addUser(@Validated User user, Errors errors) { // 校验有错,返回添加用户页面 if (errors.hasErrors()) { return "addUser"; } // 校验无错,返回成功页面 return "success"; } }注意:在addUser方法,对于要校验的参数加上@Validated注解符。6、启动服务器,查看运行效果
三、JSR-303 风格校验JSR-303 是 Java 官方推出的一套 Validation 接口,Hibernate 给出了一个完整实现。
1、在pom.xml文件里引入JavaBean校验与Hibernate校验器
<!--JavaBean校验--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency> <!--Hibernate校验器--> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.0.1.Final</version> </dependency>2、在实体类属性上添加注解设置验证逻辑
package net.hw.spring.bean; import org.hibernate.validator.constraints.NotBlank; import org.hibernate.validator.constraints.Range; /** * Created by howard on 2017/3/30. */ public class Person { @NotBlank(message = "姓名不能为空") private String name; @Range(min = 10, max = 100, message = "年龄超出范围") private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }3、在Spring MVC配置文件里添加注解驱动元素
<mvc:annotation-driven/>4、在控制器里给校验参数添加@Valid注解
package net.hw.spring.webmvc; import net.hw.spring.bean.Person; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.validation.Valid; /** * Created by howard on 2017/3/30. */ @Controller @RequestMapping("person") public class PersonController { @RequestMapping("/toAddPerson") public ModelAndView toAddPerson() { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("addPerson"); modelAndView.addObject(new Person()); return modelAndView; } @RequestMapping("/addPerson") public String addPerson(@Valid Person person, Errors errors) { // 校验有错,返回添加人员页面 if (errors.hasErrors()) { return "addPerson"; } // 校验无错,返回成功页面 return "success"; } }5、修改起始页面index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>表单校验案例</title> </head> <body> <h3>表单校验案例</h3> <ol> <li><a href="/user/toRegister">注册</a></li> <li><a href="/add/toAddUser">添加用户</a></li> <li><a href="/person/toAddPerson">添加人员</a></li> </ol> </body> </html>6、创建addPerson.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <html> <head> <title>添加人员</title> <script type="text/javascript"> function clearNameError() { var nameError = document.getElementById("nameError"); nameError.innerHTML = ""; } function clearAgeError() { var ageError = document.getElementById("ageError"); ageError.innerHTML = ""; } </script> </head> <body> <form:form action="/person/addPerson" modelAttribute="person"> <table border="0" cellpadding="5"> <tr align="center"> <td colspan="2"><h3>添加人员</h3></td> </tr> <tr> <td>姓名:</td> <td> <form:input path="name" onfocus="clearNameError()"/> </td> <td> <span id="nameError"><form:errors path="name" cssClass="error" cssStyle="color:red"/></span> </td> </tr> <tr> <td>年龄:</td> <td> <form:input type="number" path="age" onfocus="clearAgeError()"/> </td> <td> <span id="ageError"><form:errors path="age" cssClass="error" cssStyle="color:red"/></span> </td> </tr> <tr align="center"> <td colspan="2"> <input type="submit" value="添加"/> <input type="reset" value="重置"/></td> </tr> </table> </form:form> </body> </html>7、启动服务器,查看运行结果
验证框中@NotEmpty、@NotBlank、@NotNull乍一看还是容易弄混的。@NotEmpty 用在集合类上面(不能为null或者长度为0)@NotBlank 用在String上面(忽略尾部空格,纯空格字符串认为是Blank的)@NotNull 用在基本类型上
相关文章推荐
- 14、SSM框架-Spring MVC介绍(1)
- Spring Mvc那点事---(40)SSM服务框架使用aop进行数据验证
- SSM框架下的二手教材交易系统之用户登录(包括表单提前验证,ajax)
- 实战SPRING MVC 表单验证框架
- SSM框架笔记13:Spring MVC基础
- SSM框架---二手教材交易系统之用户登录(包括表单提前验证,ajax)
- 实战Spring MVC 表单验证框架
- YII框架分析笔记3:表单模型和验证
- YII框架分析笔记3:表单模型和验证
- Spring+SpringMVC+Mybatis框架整合例子(SSM) 学习笔记
- 【笔记】Spring MVC学习指南(五)数据绑定和表单标签库
- 分布式服务框架-原理与实践:14---流量控制-学习笔记(实际篇)
- IDEA下SSM框架项目笔记
- 手把手教你自己写一个js表单验证框架的方法
- 一个简单的JavaScript表单验证框架
- [zz]ASP.NET MVC2框架验证学习笔记
- JQuery笔记(表单验证)六 errorcontainer-demo_4.html errorClass
- YII框架自带表单验证
- 介绍jquery.validate.js简单实用的表单验证框架
- SSM框架----spring MVC原理