25.springMVC中的数据验证

SpringMVC使用hibernate的实现的校验框架validation,所以需要导入相关依赖的jar包
	classmate-1.1.0.jar
	hibernate-validator-5.1.3.Final.jar
	jboss-logging-3.1.4.GA.jar
	validation-api-1.1.0.Final.jar
数据校验之后,如果有错误信息,那么需要使用spring提供的标签库中的标签在页面中显示校验信息
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form" %>

validation.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
	<!-- 
		post提交方式 
		modelAttribute代表模型中必须有一个user对象
		sf:errors代表错误展示,将来会自动展示,不需要我们管
		没有action跳转路径,默认跳转到当前页面
	 -->
		<sf:form method="post" modelAttribute="user">
			<sf:label path="name">用户名:</sf:label> 
			<sf:input path="name"/>
			<sf:errors path="name" cssStyle="color:red"></sf:errors><br>
			
			<sf:label path="age"> 年   龄:</sf:label>
			<sf:input path="age"/>
			<sf:errors path="age" cssStyle="color:red"></sf:errors><br>
			
			<sf:label path="dob"> 生   日:</sf:label>  
			<sf:input path="dob"/>
			<sf:errors path="dob" cssStyle="color:red"></sf:errors><br>
			
			<input type="submit" value="提交"/>  <!-- 提交的时候POST -->
		</sf:form>
	</body>
</html>
注意:
	1.需要访问一个Controller再跳转到这个页面,同时需要向模型中添加一个名字叫user的对象(这就是之前说的命令/表单对象),否则跳转到这个页面的时候会报错
	2.表单中没有这种action属性值,那么默认把数据提交给当前页面,但是提交方式是post
	3.input标签中的path属性的值对应的是表单对象中的属性
	4.Controller中映射的url为:/Valid/add , 如果是get方式访问这个url那么就把valid.jsp显示给用户,如果是post方式访问这个url,就表示要提交表单的数据。
	5.在Controller中,在需要验证的参数前面加入@Valid注解
	6.方法参数列表中,加入BindingResult对象,用来接收验证的错误信息,并根据这个进行不同情况的跳转
	7.在被验证的表单对象所属类中,给需要验证的属性上加入指定注解

ValidationController.java
get方式是跳转页面,post方式是提交表单

@RequestMapping("/validation")
@Controller
public class ValidationController {
	@ModelAttribute("user")  //提供一个user对象,解决了内存中没有user的问题
	public User getUser() {
		return new User();
	}
	/*
	 Controller中映射的url为:/validation/test,默认是GET方式
	  如果是get方式访问这个url那么就把validation.jsp显示给用户,
	  如果是post方式访问这个url,就表示要提交表单中的数据,默认提交到当前路径
	 */
	@RequestMapping(value="/test",method=RequestMethod.GET)
	public String test(){
		System.out.println("ValidationController test()---GET");
		return "validation";//GET方式提交(默认),validation.jsp
		//必须要有一个user对象,进行验证
	}
	
	@RequestMapping(value="/test",method=RequestMethod.POST)
	public String test(@Valid User u,BindingResult bindingResult){//先从模型中找对象
		//在需要验证的参数前面加入@Valid注解
		//加入BindingResult对象,用来接收验证的错误信息
		System.out.println("ValidationController test()---POST");
		//如果验证数据中有错误信息,将保存在bindingResult对象中
		if(bindingResult.hasErrors()){
			List<ObjectError> errorList = bindingResult.getAllErrors();             
			for(ObjectError error : errorList){                 
				System.out.println(error.getDefaultMessage());  //打印bindingResult对象中的错误信息           
			}
			//验证不通过在跳到validation页面,因为页面上有显示错误的标签
			return "validation";
		}
		System.out.println("u="+u);
		System.out.println("日期:"+u.getDob());
		return "test";//POST方式提交,提交表单中的数据,提交到当前路径
	}
}

常用的数据校验的注解

@Null		值只能为null
@NotNull	值不能为null
@NotEmpty	值不为null且不为空
@NotBlank	值不为null且不为空(先去除首尾空格)
@Pattern	正则表达式验证
@Size		限制长度在x和y之间
@Max		最大值
@Min		最小值
@Future		必须是一个将来的日期(和现在比)  备忘录
@Past		必须是一个过去的日期(和现在比)	生日
@Email		校验email格式
注意:日期属性上要加@DateTimeFormat(pattern="yyyy-MM-dd"),否则页面传的字符串是不能自动转为为日期的

验证举例子:

public class User implements Serializable{
	private long id;
	
	@Size(min=5,max=8,message="用户名长度再5-8字符") 
	//默认的错误信息:个数必须在5和8之间,自己定义了错误信息
	//@NotBlank	//值不为null且不为空(先去除首尾空格)  默认的错误信息 :用户为空
	@NotBlank(message="请输入用户名")	
	//自己写的错误信息:请输入用户名
	private String name;
	
	private int age;
	
	@Past 
	//默认的错误信息 :需要是一个过去的时间
	@DateTimeFormat(pattern="yyyy-MM-dd")
	private Date dob;
	
	get/set...
}

用了@NotBlank
在这里插入图片描述
@NotBlank(message=“请输入用户名”)
自己写的错误信息:请输入用户名
在这里插入图片描述
@Size(min=5,max=8)
@NotBlank(message=“请输入用户名”)
同时显示
在这里插入图片描述
@Size(min=5,max=8,message=“用户名长度再5-8字符”)
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值