SpringMVC已经实现了对Java校验API(JSR-303)的支持,通过使用该API可以实现对数据的校验。要使用SpringMVC的Java校验API并不需要任何配置,只要引入其实现即可。本文使用hibernate-validator 5.2.4。

  首先使用Maven使用hibernate-validator 5.2.4。接着就可以直接使用了。本文使用场景为注册,注册时需要提供用户名、密码以及出生日期,用户名以及密码的长度为5到20,出生日期必须为过去时间。

  首先使用Java校验API提供的注解来注解需要校验的bean,具体的注解在本文最后列出注册前的数据校验

package cn.powerfully.demo.domain;

import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Size; public class User {
@NotNull
@Size(min = 5, max = 20)
private String username;
@NotNull
@Size(min = 5, max = 20)
private String password;
@NotNull
@Past
private Date birth; public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String passwrod) {
this.password = passwrod;
} }

  对于Controller中方法,使用bean来传递参数,使用@Validated注解该参数表示该bean需要进行校验,并且该方法中必须要有类型为Errors的参数(当然实现了Errors旗下的都可以,例如BindingResult)。

@RequestMapping(path = "register", method = RequestMethod.POST)
public String doRegister(Model model, @Validated User user, Errors errors) {
if (errors.hasErrors()) {
model.addAttribute("errors", errors);
return "register";
}
// ...
model.addAttribute(user);
return "msg";
}

  如果校验存在错误,则将错误信息存放在request中并转发到注册表单。对于jsp页面,从request域中获取错误信息。  

<%@ page language="java" contentType="text/html; charset=UTF-8"
isELIgnored="false" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>注册</h1>
<br>
<form method="post"
action="${pageContext.request.contextPath }/user/register">
<input type="text" name="username" placeholder="用户名"> ${errors.getFieldError("username").defaultMessage }<br>
<input type="password" name="password" placeholder="密码"> ${errors.getFieldError("password").defaultMessage }<br>
<input type="date" name="birth" placeholder="出生日期"> ${errors.getFieldError("birth").defaultMessage }<br> <input
type="submit" value="注册">
</form>
</body>
</html>

  JAVA EE6以上版本中EL表达式可以直接调用方法,不可以直接使用errors.fieldError["username"].defaultMessage,因为fieldError在其实现类里面并不是一个数组或集合。效果如下:

  关于错误信息的显示,还有更方便的方法,那就是使用Spring提供的Jsp标签,关于Spring的JSP标签,这里就不写了。

  如果先自定义错误信息,可以编写ValidationMessages.properties文件并置于类目录,在properties文件里下:

username.size=用户名长度必须为{min}到{max}
password.size=密码长度必须为{min}到{max}
birth.notNull=日期不能为空
birth.past=日期必须是过去的

  在bean注解时,使用message属性来指定错误信息:

@NotNull
@Size(min = 5, max = 20, message = "{username.size}")
private String username;
@NotNull
@Size(min = 5, max = 20, message = "{password.size}")
private String password;
@NotNull(message = "{birth.notNull}")
@Past(message = "{birth.past}")
private Date birth;

  如果想使用国际化,需要创建ValidationErrors_xx.properties。


以下是Java校验API提供的校验注解

注解 描述
@AssertFalse  注解在Boolean类型上,并且值为false
@AssertTrue  注解在Boolean类型上,并且值为true 
@DecimalMax  所注解的元素必须是数字, 并且它的值要小于或等于给定的BigDecimalString值
@DecimalMin  所注解的元素必须是数字, 并且它的值要大于或等于给定的BigDecimalString值
@Digits  所注解的元素必须是数字, 并且它的值必须有指定的位数
@Future  所注解的元素的值必须是一个将来的日期
@Max  所注解的元素必须是数字, 并且它的值要小于或等于给定的值
@Min  所注解的元素必须是数字, 并且它的值要大于或等于给定的值
@NotNull  所注解元素的值必须不能为null
@Null  所注解元素的值必须为null
@Past  所注解的元素的值必须是一个已过去的日期
@Pattern  所注解的元素的值必须匹配给定的正则表达式
@Size  所注解的元素的值必须是String、 集合或数组, 并且它的长度要符合给定的范围

SpringMVC之表单校验的更多相关文章

  1. Spring MVC 文件上传、Restful、表单校验框架

    目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...

  2. 利用jquery.validate以及bootstrap的tooltip开发气泡式的表单校验组件

    表单校验是页面开发中非常常见的一类需求,相信每个前端开发人员都有这方面的经验.网上有很多成熟的表单校验框架,虽然按照它们默认的设计,用起来没有多大的问题,但是在实际工作中,表单校验有可能有比较复杂的个 ...

  3. AngularJS 1.2.x 学习笔记(表单校验篇)

    https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...

  4. angularJs表单校验(超级详细!!!)

    html代码 <!DOCTYPE html> <html ng-app="angularFormCheckModule"> <head> < ...

  5. bootstrap+jQuery.validate表单校验

    谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...

  6. 关于jQuery表单校验的应用

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  7. php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)

    /** * 表单校验函数库 */ /** * 判断email格式是否正确 * @param $email */ function is_email($email) { return strlen($e ...

  8. 关于jQuery表单校验

    <style> .red{border: 1px solid red;} .wrong-tip{color: red;} </style> <form action=&q ...

  9. jQuery.validate表单校验+bootstrap

    谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...

随机推荐

  1. IntelliJ IDEA配置Tomcat(完整版教程)

    查找该问题的童鞋我相信IntelliJ IDEA,Tomcat的下载,JDK等其他的配置都应该完成了,那我直接进入正题了. 1.新建一个项目 2.由于这里我们仅仅为了展示如何成功部署Tomcat,以及 ...

  2. kafka参数

    转载地址http://debugo.com/kafka-params/ ############################# System ########################### ...

  3. 基类的析构函数写成virtual虚析构函数

    虚函数作用:动态绑定,实现多态效果. 场景问题: 派生类中有资源需要回收,而在编程中采用多态,由基类的指针指向派生类,则在释放的时候,如果基类的析构函数不是virtual,则派生类的析构函数得不到释放 ...

  4. vc6中向vs2010迁移的几个问题(2)

    1. 库文件的迁移 参考:http://www.cnblogs.com/icmzn/p/6724969.html 2. 其他项目中的可能遇到的问题: 2.1 无法打开包括文件:“fstream.h”: ...

  5. codeforces966 A

    这题主要就是考虑y1两侧的最近的电梯和楼梯 当时主要是考虑  如果电梯在y1和y2中间的话   那么直接做电梯就是最优解   如果在y2右边就用abs去算 然后发现其实只考虑 y1的左右两边的电梯和楼 ...

  6. bootstrap1相关学习文档

    <em>Bootstrap 框架</em>                                                    //倾斜 4.对齐 //设置文 ...

  7. 前端开发 - JavaScript 词法分析

    JavaScript代码运行前有一个类似编译的过程即词法分析,词法分析主要有三个步骤: 1.分析函数的参数 2.分析函数的变量声明 3.分析函数的函数声明表达式 具体步骤如下: 函数在运行的瞬间,生成 ...

  8. 你所不知道的ASP.NET Core MVC/WebApi基础系列 (二)

    转自博客:https://www.cnblogs.com/CreateMyself/p/10604293.html 前言 本节内容,我们来讲讲.NET Core当中的模型绑定系统.模型绑定原理.自定义 ...

  9. Git入门--创建版本库,关联远程库,从远程库下载

    1.(先进入项目文件夹)通过命令 git init 把这个目录变成git可以管理的仓库 git init 2.把文件添加到版本库中,使用命令 git add .添加到暂存区里面去,不要忘记后面的小数点 ...

  10. 冰与火之歌居然是在 DOS 系统上写出来的

    简评:<权力的游戏>第八季(最终季)终于开播了!这部美剧的原著小说有一个很有趣的冷知识 -- 它是在运行 DOS 系统的计算机上写出来的.其实不少老粉都已经知道这个典故,不过听到老爷子的亲 ...