springmvc注解开发-validation校验

使用注解的方式进行服务器端的数据校验。

Springmvc使用的是hibernate的校验框架validation(和hibernate没有任何关系)

1、校验思路:

页面提交请求的参数,请求到controller方法中,使用validation进行校验。如果校验出错,将错误信息展示到页面。

2、具体需求:

商品修改,添加校验(校验商品名称长度,生产日期非空校验),如果校验出错,在页面显示错误信息。

3、校验环境的搭建

Hibernate的校验框架所需要的jar包,下载地址:点击打开链接


4、配置校验器

springmvc的配置文件中添加配置校验器:

	
	
	
		
		
		
		
	
	
	
		
		
			
				classpath:CustomValidationMessages
			
		
		
		
		
		
	

5、将校验器注入处理器适配器

	 
	
	

	
	
	
		
	
	
	
		
	

6、在pojo中添加校验规则

package com.sky.ssm.po;

import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.sky.ssm.controller.validation.ValidGroup1;

public class Items {
    private Integer id;
    //校验名称长度在1~30之间,
    //message为 错误提示信息,{items.name.length.error}表示取配置文件中的信息
    //groups:将此校验划分至那个分组,groups可以定义多个分组
    @Size(min=1,max=30,message="{items.name.length.error}",groups={ValidGroup1.class})
    private String name;
    private Double price;
    private String pic;
    //非空校验
    @NotNull(message="{items.createtime.isNull}")
    private Date createtime;
	//省略....
}
在pojo中添加校验规则时,可以为其添加校验分组,groups,当不同的controller方法对一个pojo进行校验又需要不同的校验规则时,可以使用分组校验。

ValidGroup1.java

package com.sky.ssm.controller.validation;
/**
 * 校验分组
 * @author sk
 * 此分组只校验商品名称的长度
 */
public interface ValidGroup1 {
	//接口中不需要定义任何方法,仅是对不同的校验规则进行分组
}

7、编写错误信息提示文件

CustomValidationMessages.properties

#添加校验错误提示信息
items.name.length.error = 请输入1到30个字符的商品名称
items.createtime.isNull = 请输入商品的生产日期

8 捕获错误校验信息

	//在需要校验的pojo前面添加@Validated,在需要校验的pojo后边添加BindingResult bindingResult接收校验出错信息
	//注意:@Validated和BindingResult是配对出现的,并且在形参里面的顺序是固定的(一前一后)
	//value={ValidGroup1.class}:指定使用ValidGroup1分组的校验
	@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,String name,
			@Validated(value={ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult) throws Exception{
		
		//获取校验错误信息
		if(bindingResult.hasErrors()){//如果有错误
			//输出错误信息
			List allErrors = bindingResult.getAllErrors();
			for (ObjectError objectError : allErrors) {
				//输出错误信息
				System.out.println(objectError.getDefaultMessage());
			}
			//将错误信息传到页面
			model.addAttribute("allErrors", allErrors);
			//出错后重新回到商品的修改页面
			return "items/editItems";
		}
		
		//调用service更新商品信息,页面需要将商品新传到此方法
		itemsService.updateItems(id, itemsCustom);
		
		//重定向到商品的查询列表
		return "redirect:queryItems.action";
	}

9 在页面显示校验错误信息

controller方法中将错误信息传到页面

页面显示错误信息



	
		${error.defaultMessage }

项目结构

springmvc注解开发-validation校验_第1张图片




你可能感兴趣的:(JAVA,java框架)