jar导入
maven 依赖:
<!-- spring mvc 数据校验 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
Controller
package com.controller;
@Controller
public class MyController {
@ModelAttribute("user")
//@ModelAttribute() 放在方法上,代表该Controller的所有方法在掉用钱,先执行@ModelAttribute方法
public User1 getUser(User1 uu1){
System.out.println("我是ModeAttribute......."); //控制台始终先输出这句话 ,说明此方法先执行!!
System.out.println(uu1.toString()); //此地方思考一下 为什么uu1打出来的是实时的数据?? 数据在请求时,把数据会第一时间绑定到@ModelAttribute("user")后!
User1 uu = new User1(); //相当于request.setAttribute("user","uu")
return uu;
}
@RequestMapping("/Get") //@Valid表示开始校验 让@NotEmpty之类的校验起作用
public String ssss(Model model,@Validated @ModelAttribute("user") User1 user,BindingResult result){
//此处BindingResult跟@Validated的顺序可不可以交换 是不可以调换位置的!!会报错
//如果把@ModelAttribute("user") 去掉的话,错误信息,就不会返回给页面输出 注意!!!!
System.out.println("我是Controller.......");
System.out.println(user.toString());
if(result.hasErrors()){
model.addAttribute("userNameWrror", "");
System.out.println("errors");
return "get";
}else{
model.addAttribute("user1",new User1("张三","1111"));
System.out.println("get............");
return "get";
}
}
}
springmvc-servlet.xml
开启扫描注解
<mvc:annotation-driven />
User1 实体类!
package com.bean;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
public class User1 {
@NotEmpty(message="用户名不能为空!")
@Length(min=3,max=6,message="用户名长度不正确!")
private String username;
@NotEmpty(message="不能为空!")
@Email(message="必须符合qq邮箱校验!!!")
private String email;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public User1() {
super();
}
public User1(String username, String email) {
super();
this.username = username;
this.email = email;
}
@Override
public String toString() {
return "User1 [username=" + username + ", email=" + email + "]";
}
}
jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<sf:form modelAttribute="user">
<sf:errors></sf:errors>
<sf:input path="username"/>
<sf:errors path="username"></sf:errors>
<sf:input path="email"/>
<sf:errors path="email"></sf:errors>
<input type="submit" value="load">
</sf:form>
</body>
</html>
测试 页面: http://localhost:8080/MavenWeb3/Get/
测试成功!
附录:
@size和@length的区别:
注解 | 运行时检查 |
@AssertFalse | 被注解的元素必须为false |
@AssertTrue | 被注解的元素必须为true |
@DecimalMax(value) | 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 |
@DecimalMin(Value) | 被注解的元素必须为一个数字,其值必须大于等于指定的最小值 |
@Digits(integer=, fraction=) | 被注解的元素必须为一个数字,其值必须在可接受的范围内 |
@Future | 被注解的元素必须是日期,检查给定的日期是否比现在晚 |
@Max(value) | 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 |
@Min(value) | 被注解的元素必须为一个数字,其值必须大于等于指定的最小值 |
@NotNull | 被注解的元素必须不为null |
@Null | 被注解的元素必须为null |
@Past(java.util.Date/Calendar) | 被注解的元素必须过去的日期,检查标注对象中的值表示的日期比当前早 |
@Pattern(regex=, flag=) | 被注解的元素必须符合正则表达式,检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配 |
@Size(min=, max=) | 被注解的元素必须在制定的范围(数据类型:String, Collection, Map and arrays) |
@Valid | 递归的对关联对象进行校验, 如果关联对象是个集合或者数组, 那么对其中的元素进行递归校验,如果是一个map,则对其中的值部分进行校验 |
@CreditCardNumber | 对信用卡号进行一个大致的验证 |
| 被注释的元素必须是电子邮箱地址 |
@Length(min=, max=) | 被注解的对象必须是字符串的大小必须在制定的范围内 |
@NotBlank | 被注解的对象必须为字符串,不能为空,检查时会将空格忽略 |
@NotEmpty | 被注释的对象必须为空(数据:String,Collection,Map,arrays) |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 (数据:BigDecimal, BigInteger, String, byte, short, int, long and 原始类型的包装类 ) |
@URL(protocol=, host=, port=, regexp=, flags=) | 被注解的对象必须是字符串,检查是否是一个有效的URL,如果提供了protocol,host等,则该URL还需满足提供的条件 |