SpringMVC之表单校验
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之表单校验的更多相关文章
- Spring MVC 文件上传、Restful、表单校验框架
目录 文件上传 Restful Restful 简介 Rest 行为常用约定方式 Restful开发入门 表单校验框架 表单校验框架介绍 快速入门 多规则校验 嵌套校验 分组校验 综合案例 实用校验范 ...
- 利用jquery.validate以及bootstrap的tooltip开发气泡式的表单校验组件
表单校验是页面开发中非常常见的一类需求,相信每个前端开发人员都有这方面的经验.网上有很多成熟的表单校验框架,虽然按照它们默认的设计,用起来没有多大的问题,但是在实际工作中,表单校验有可能有比较复杂的个 ...
- AngularJS 1.2.x 学习笔记(表单校验篇)
https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...
- angularJs表单校验(超级详细!!!)
html代码 <!DOCTYPE html> <html ng-app="angularFormCheckModule"> <head> < ...
- bootstrap+jQuery.validate表单校验
谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...
- 关于jQuery表单校验的应用
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- php 表单校验函数库(判断email格式是否正确、http地址是否合法有效、手机号码是否合法)
/** * 表单校验函数库 */ /** * 判断email格式是否正确 * @param $email */ function is_email($email) { return strlen($e ...
- 关于jQuery表单校验
<style> .red{border: 1px solid red;} .wrong-tip{color: red;} </style> <form action=&q ...
- jQuery.validate表单校验+bootstrap
谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...
随机推荐
- JSP动作元素<jsp:include>和<jsp:param>的搭配使用
最近开发项目中广告头的优化:引入了<jsp:include page="XX.jsp"></jsp:include> 当<jsp:include> ...
- Legal or Not HDU
Legal or Not Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Linked List
链表是线性表的一种.线性表是最基本,最简单也是最常见的一种数据结构.线性表中数据元素之间的关系是一对一的关系,除了第一个和最后一个数据元素外,其他数据元素都是首尾相接的. 线性表有两种存储方式,一种是 ...
- 第5件事 做一个有taste的产品人
1.taste的意思是品位,也就是说产品经理应该是一个有品位的产品人.什么叫品位呢?品位指的是对事物有分辨与鉴赏的能力.品位是形象的展示,品位是内在气质的复出,品位是人生价值的体验,品位是道德修养的内 ...
- Page_Load是怎样被执行的
关于Asp.Net的生命周期的文章,很多很多,不管是管道生命周期,还是页面生命周期,图文并茂的文章并不少,我就不说了,我只是在复习这些知识点的时候,想具体知道一个页面的Page_Load方法到底是怎么 ...
- uwp 用win2d获取图片主调颜色
win10在设置颜色里有个从“背景图片中选取一种主题颜色”的选项,还有在很多内容展示软件中都使用了这样的功能. 现在我们需要在 nuget 引用 win2d.uwp 和 Toolkit.uwp 两个库 ...
- 【友情链接】各位dalao的博客
同省神犇 HA队长 __stdcall HA chty_syq为文文讲过字符串 HA cdcq为文文讲过后缀数组① ② Bluesky007超强的 外省神犇 知名OIer黄学长 一个可爱的蓝孩子qwq ...
- MariaDB 库的基本操作(2)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...
- pinnet 计算云分区
fdisk /dev/xvdemne mnlEnterEnter 9G-98G-98G-478M-28G-28G-28G mw #设置文件格式mkfs -t ext4 /dev/xvde5mkfs - ...
- Git - 必知必会
配置Git git config --global user.name "your_name" # 配置全局用户名 git config --global user.email & ...