坐标 校验 必须的坐标
<!--导入校验的jsr303规范-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!--导入校验框架实现技术-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.0.Final</version>
</dependency>
</dependencies>
配置文件 spring 没有
配置文件 springmvc
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="com.itheima"/>
<mvc:annotation-driven/>
</beans>
web.xml
<!--过滤器访问路径过滤-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<!--分配器映射路径-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
页面代码
<html>
<head>
<title>添加员工-用于演示表单验证</title>
</head>
<body>
<form action="/addemployee" method="post">
<%--页面使用${}获取后台传递的校验信息--%>
员工姓名:<input type="text" name="name"><span style="color:red">${name}</span><br/>
员工年龄:<input type="text" name="age"><span style="color:red">${age}</span><br/>
<%--注意,引用类型的校验未通过信息不是通过对象进行封装的,直接使用对象名.属性名的格式作为整体属性字符串进行保存的,和使用者的属性传递方式有关,不具有通用性,仅适用于本案例--%>
<%--省:<input type="text" name="address.provinceName"><span style="color:red">${requestScope['address.provinceName']}</span><br/>--%>
<input type="submit" value="提交">
</form>
</body>
</html>
<%--本次案例从这个页面发起--%>
controller层
@Controller
public class EmployeeController {
@RequestMapping(value = "/addemployee")
public String addEmployee(@Valid Employee employee, Errors errors, Model m){
//@Valid 用来校验的,加上就启开校验,不用对校验作其他的事
//Errors对象用来保存所有的问题 现象
// errors.hasErrors()用来判断该对象检测到页面输入的数据,是否符合规则,没有打印出false
// System.out.println(errors.hasErrors());
if (errors.hasErrors()){
List<FieldError> fieldErrors = errors.getFieldErrors();
for (FieldError error : fieldErrors) {
//System.out.println(error.getField());//打印 出的信息 name
//error.getField() 得到的是 变量名称
//System.out.println(error.getDefaultMessage());//打印 出的信息 姓名不能为空
//error.getDefaultMessage() 得到的是 变量注解上定义的 提示信息
//这说明 errors.getFieldErrors() 是对 该对象的输入信息的校验内容进行监控的
// Errors 是封装属性 或者是变量 的错误信息
//Model 对象 用来将数据封装传到页面去的
//m.addAttribute 需要传递属性名 与属性值 就是对象的验证后出错的 变量名称 与注解上定义的错误提示信息
//error.getField() 就是对象的验证后出错的 变量名称
// error.getDefaultMessage() 就是变量注解上定义的错误提示信息
m.addAttribute(error.getField(),error.getDefaultMessage());
}
//验证没有通过 就跳转到输入框的页面
//发生校验未通过 要在输入框显示提示信息
//在页面输入框标签 中间 加 ${name} 才能显示输入框显示提示信息
//举列:输入框标签 员工姓名:<input type="text" name="name"><span style="color:red">${name}</span><br/>
return "addemployee.jsp";
}
return "success.jsp";
}
}
对象类
public class Employee {
//@NotBlank用来设置校验规则的
//message 用来在输入框进行提示的
@NotBlank(message = "姓名不能为空")
private String name; //员工名字
private Integer age; //员工年龄
// private Address address;
//
// public Address getAddress() {
// return address;
// }
//
// public void setAddress(Address address) {
// this.address = address;
// }
public void setName(String name) {
this.name = name;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}