SpringMVC4.3x教程之六验证Validator详解

来源:互联网 发布:医疗产业化 知乎 编辑:程序博客网 时间:2024/05/16 15:02

SpringMVC支持对上传的内容进行校验,Validator接口,目的就是实现校验的功能。
我们在控制器的映射方法中可以写一些自定义类型的参数,那么我们需要对这样的对象进行属性的校验就可以使用校验器啦。
比如,我有一个新闻类

public class News {    private int id;    private String content;//新闻内容    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }}

自定义校验器

@Servicepublic class NewsValidation implements Validator{    @Override    public boolean supports(Class<?> clz) {        // TODO Auto-generated method stub        return News.class.equals(clz);    }    @Override    public void validate(Object obj, Errors errors) {        // TODO Auto-generated method stub        News news=(News) obj;        //参数说明:1、错误对象2、属性名3、国际化的key4、提示信息        ValidationUtils.rejectIfEmpty(errors, "content", null, "内容不能为空");        if(news.getId()<1 ){            errors.rejectValue("id",null, "序号不能小于1");        }        if(!news.getContent().matches("[a-zA-Z]{10,}"))        {            errors.rejectValue("content", null, "内容只能是字母组成,最少10位");        }    }}

控制器:

@Controllerpublic class NewsController {    //注入校验器对象    @Autowired    private NewsValidation nv;    @ModelAttribute("news")    public News pre(){        return new News();    }    //添加自定义校验器    @InitBinder    public void test3(DataBinder dataBinder){        dataBinder.replaceValidators(nv);    }    @RequestMapping("/vtest")    public String test1(){        return "validatortest";    }    //校验的方法,注意2个参数要挨着    @RequestMapping("/validtor")    public String test2(@Validated News news,Errors errors){        return "validatortest";    }}

页面

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%>    <%@ taglib prefix="f" uri="http://www.springframework.org/tags/form" %><!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>SpringMVC的表单校验</title><style type="text/css">.error{color: red;font-size: 12px;}</style></head><body><h1>SpringMVC的表单校验</h1><div><f:form action="validtor" commandName="news">序号:<f:input path="id"/><f:errors cssClass="error" path="id"></f:errors><br/>内容:<f:input path="content"/><f:errors cssClass="error" path="content"></f:errors><br/><f:button>校验</f:button></f:form></div></body></html>
阅读全文
0 0
原创粉丝点击