Spring MVC 之输入验证(六)
2016-01-30 10:07
447 查看
Spring MVC 验证主要还是用的是hibernate的验证。so需要添加以下的jar包:
1、 hibernate-validator-5.2.2.Final.jar
2、hibernate-validator-annotation-processor-5.2.2.Final.jar (这个可以不用)
3、 log4j.jar
4 、slf4j-api-1.5.6.jar
5、 slf4j-log4j12-1.5.6.jar
6 、validation-api-1.1.0.Final.jar
以登录验证为例:
在实体属性上配置注解;
JSP页面上通过spring标记来获取错误信息:
delimiter:如果一个属性有多个错误,错误信息的分隔符。默认是换行.
path:验证失败的属性名.
控制器:
如果界面上使用了spring标签,那么需要预先启动Spring容器,所以在web.xml中增加配置:
到springAnnotation-servlet.xml文件中配置:
显示测试:
进入登录页面
直接点击提交:
下面是主要的验证注解及说明:
1、 hibernate-validator-5.2.2.Final.jar
2、hibernate-validator-annotation-processor-5.2.2.Final.jar (这个可以不用)
3、 log4j.jar
4 、slf4j-api-1.5.6.jar
5、 slf4j-log4j12-1.5.6.jar
6 、validation-api-1.1.0.Final.jar
以登录验证为例:
在实体属性上配置注解;
package com.cy.springannotation.entity; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; /** * 定义一个表单实体类 * @author acer * */ public class UserBean { //要求属性名必须要和表单的参数名一样的! @NotEmpty(message="用户名不能为空!") @Pattern(regexp="\\w{6,20}",message="用户名6-20位") private String username; @NotEmpty(message="密码不能为空") @Length(max=20,min=6,message="密码不能小于6位") private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
JSP页面上通过spring标记来获取错误信息:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!-- srpingmvc 验证需要使用到spring表单标签 --> <%@ taglib prefix="springform" uri="http://www.springframework.org/tags/form" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>验证页面</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <!-- commandName用于指定活动的Bean对象,即我可以在页面上,获取对象属性所对应的错误信息,值是对象名称的首字母小写,同modelAttribute一样的意思(modelAttribute="contentModel") --> <!-- <springform:form method="post" action="login.do" commandName="userBean"> --> <springform:form method="post" action="login.do" modelAttribute="user"> <table> <tr> <td>用户名:</td> <td><input type="text" name="username"/><springform:errors delimiter="," path="username"></springform:errors></td> </tr> <tr> <td>密码</td> <td><input type="text" name="password"/><springform:errors delimiter="," path="password"></springform:errors></td> </tr> <tr> <td colspan="2"> <input type="submit" value="提交"/> </td> </tr> </table> </springform:form> </body> </html>
delimiter:如果一个属性有多个错误,错误信息的分隔符。默认是换行.
path:验证失败的属性名.
控制器:
@RequestMapping(value="/login.do") //@Valid 通过该注解告知该方法,我的哪个实体Bean需要验证 //BindingResult 为固定参数,用于接收验证结果 public String login(@ModelAttribute("user") @Valid UserBean user,BindingResult br) { if(br.hasErrors()){ //验证未通过则 return "validate1"; } log.info(user.getUsername()); log.info(user.getPassword()); return "index"; }
如果界面上使用了spring标签,那么需要预先启动Spring容器,所以在web.xml中增加配置:
<!-- 启动spring容器,用于支持springmvc validate --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/springAnnotation-servlet.xml</param-value> </context-param> <!-- 配置在context-param里面文件内的内容,需要通过 ContextLoaderListener添加到上下文里面去--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
到springAnnotation-servlet.xml文件中配置:
<!-- 开启注解这里需要添加个validator--> <!--开启注解 --> <mvc:annotation-driven conversion-service="tc" validator="validator" /> <!-- 验证配置,告知srpingmvc,我使用的是Hibernate验证框架来完成的验证 --> <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> <property name="providerClass" value="org.hibernate.validator.HibernateValidator" /> </bean>
显示测试:
进入登录页面
直接点击提交:
下面是主要的验证注解及说明:
注解 | 适用的数据类型 | 说明 |
@AssertFalse | Boolean, boolean | 验证注解的元素值是false |
@AssertTrue | Boolean, boolean | 验证注解的元素值是true |
@DecimalMax(value=x) | BigDecimal, BigInteger, String, byte,short, int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of Number andCharSequence. | 验证注解的元素值小于等于@ DecimalMax指定的value值 |
@DecimalMin(value=x) | BigDecimal, BigInteger, String, byte,short, int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of Number andCharSequence. | 验证注解的元素值小于等于@ DecimalMin指定的value值 |
@Digits(integer=整数位数, fraction=小数位数) | BigDecimal, BigInteger, String, byte,short, int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of Number andCharSequence. | 验证注解的元素值的整数位数和小数位数上限 |
@Future | java.util.Date, java.util.Calendar; Additionally supported by HV, if theJoda Time date/time API is on the class path: any implementations ofReadablePartial andReadableInstant. | 验证注解的元素值(日期类型)比当前时间晚 |
@Max(value=x) | BigDecimal, BigInteger, byte, short,int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type ofCharSequence (the numeric value represented by the character sequence is evaluated), any sub-type of Number. | 验证注解的元素值小于等于@Max指定的value值 |
@Min(value=x) | BigDecimal, BigInteger, byte, short,int, long and the respective wrappers of the primitive types. Additionally supported by HV: any sub-type of CharSequence (the numeric value represented by the char sequence is evaluated), any sub-type of Number. | 验证注解的元素值大于等于@Min指定的value值 |
@NotNull | Any type | 验证注解的元素值不是null |
@Null | Any type | 验证注解的元素值是null |
@Past | java.util.Date, java.util.Calendar; Additionally supported by HV, if theJoda Time date/time API is on the class path: any implementations ofReadablePartial andReadableInstant. | 验证注解的元素值(日期类型)比当前时间早 |
@Pattern(regex=正则表达式, flag=) | String. Additionally supported by HV: any sub-type of CharSequence. | 验证注解的元素值与指定的正则表达式匹配 |
@Size(min=最小值, max=最大值) | String, Collection, Map and arrays. Additionally supported by HV: any sub-type of CharSequence. | 验证注解的元素值的在min和max(包含)指定区间之内,如字符长度、集合大小 |
@Valid | Any non-primitive type(引用类型) | 验证关联的对象,如账户对象里有一个订单对象,指定验证订单对象 |
@NotEmpty | CharSequence, Collection, Map and Arrays | 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) |
@Range(min=最小值, max=最大值) | CharSequence, Collection, Map and Arrays,BigDecimal, BigInteger, CharSequence, byte, short, int, long and the respective wrappers of the primitive types | 验证注解的元素值在最小值和最大值之间 |
@NotBlank | CharSequence | 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格 |
@Length(min=下限, max=上限) | CharSequence | 验证注解的元素值长度在min和max区间内 |
@Email | CharSequence | 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |
相关文章推荐
- Exception in thread "main" org.javalite.activejdbc.InitException: failed to determine Model class na
- 安装Weblogic时报Exception in thread "winRegistry" java.lang.UnsatisfiedLinkError
- win10下搭建javaSe 开发环境
- 对struts2的OGNL的理解
- 使用Spring实现读写分离(MySQL实现主从复制)
- Spring MVC程序中得到静态资源文件css,js,图片文件的路径
- java之httpclient的一些破事
- JavaSE022_枚举详解
- 整理总结Java多线程程序编写的要点
- MyEclipse的 lib和Build path(构建路径)
- jrebel实现Java热更不用真是暴殄天物
- JavaSE021_数组之应用举例(利用二维数组实现五子棋图形版——二人对战)
- Eclipse安装颜色主题
- java 图片操作技术之RGB的获取
- Java 等待/唤醒机制
- Java 线程间通讯
- ubuntu 下jdk安装配置
- 模拟测试框架-Mockito
- Java Web项目相对路径
- spring与hibernate整合问题