SpringMVC整合Hibernate Validator验证方法与js校验
2017-07-27 16:06
656 查看
SpringMVC服务器验证一种是有两种方式,一种是基于Validator接口,一种是使用Annotaion JSR-303标准的验证,下面主要是学习这两种,工作中推荐后者,方便很多
使用Annotaion JSR-303标准的验证,需要页面刷新才可以,即当点击提交时,错误才能显示。可以通过js(JavaScript)来实现立即显示错误。
JavaScript 表单验证
JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。<html> <head> <script type="text/javascript"> [code] function validate_required(field,alerttxt) { with (field) { if (value==null||value=="") {alert(alerttxt);return false} else {return true} } } function validate_form(thisform) { with (thisform) { if (validate_required(email,"Email must be filled out!")==false) {email.focus();return false} } }
</script>
</head>
<body>
<form action="submitpage.htm" onsubmit="return validate_form(this)" method="post">
Email: <input type="text" name="email" size="30">
<input type="submit" value="Submit">
</form>
</body>
</html>[/code]
<form action="/back/login/login" method="post" id="form1" onsubmit="return sb1();">书写js验证规则:1 function sb1(){ 2 var username = document.getElementById("username"); 3 var password = document.getElementById("passsword"); 4 if(trim(username.value)==null || trim(username.value)==""){ 5 alert("请输入用户名"); 6 username.focus(); 7 return false; 8 } 9 if(trim(password.value)==null || trim(password.value)==""){ 10 alert("请输入密码"); 11 password.focus(); 12 return false; 13 } 14 15 return true; 16 } 17 function trim(str){ //删除左右两端的空格 18 return str.replace(/(^\s*)|(\s*$)/g, ""); 19 }
(一)使用Annotaion JSR-303标准的验证
首先是要至少导入下面两个包1、hibernate-validator-4.1.0.Final.jar
2、validation-api-1.0.0.GA.jar
使用这个需要导入支持JSR-303标准的包,建议使用Hibernate Validator这个包,先看这个标准的原生标注
1. Bean Validation
中内置的 constraint
注解 作用
@Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
---|---|
@Null | 被注释的元素必须为 null |
@NotNull | 被注释的元素必须不为 null |
@AssertTrue | 被注释的元素必须为 true |
@AssertFalse | 被注释的元素必须为 false |
@Min(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@Max(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@DecimalMin(value) | 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 |
@DecimalMax(value) | 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 |
@Size(max, min) | 被注释的元素的大小必须在指定的范围内 |
@Digits (integer, fraction) | 被注释的元素必须是一个数字,其值必须在可接受的范围内 |
@Past | 被注释的元素必须是一个过去的日期 |
@Future | 被注释的元素必须是一个将来的日期 |
@Pattern(value) | 被注释的元素必须符合指定的正则表达式 |
注解 | 作用 |
---|---|
被注释的元素必须是电子邮箱地址 | |
@Length(min=, max=) | 被注释的字符串的大小必须在指定的范围内 |
@NotEmpty | 被注释的字符串的必须非空 |
@Range(min=, max=) | 被注释的元素必须在合适的范围内 |
@NotBlank | 被注释的字符串的必须非空 |
---|---|
@URL(protocol=, host=, port=, regexp=, flags=) | 被注释的字符串必须是一个有效的url |
@CreditCardNumber | 被注释的字符串必须通过Luhn校验算法, 银行卡,信用卡等号码一般都用Luhn 计算合法性 |
@ScriptAssert (lang=, script=, alias=) | 要有Java Scripting API 即JSR 223 ("Scripting for the JavaTM Platform")的实现 |
@SafeHtml (whitelistType=, additionalTags=) | classpath中要有jsoup包 |
主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:
@NotNull 任何对象的value不能为null,用在基本类型上
@NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null,用在集合类上面
@NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0,用在String上面
?要使用很简单,在需要验证的变量前面加上该Annotation即可,看下面使用后的User
@Controller
public class StudentController {
@RequestMapping(value = "/addStudent", method = RequestMethod.GET)
public ModelAndView student() {
return new ModelAndView("addStudent", "command", new Student());
}
/**
如果没有指定该属性,则默认从request域对象中读取command的表单bean,即默认的modelAttribute 是command
如果该属性值也不存在,则会发生错误
要想显示某个页面,必须在域对象里有一个bean,bean有跟表单path所对应的属性
*/
@ModelAttribute("student")
public Student createStudentModel() {
return new Student();
}
@RequestMapping(value = "/addStudent", method = RequestMethod.POST)
public String addStudent( @Validated Student student,
BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "addStudent";
}
model.addAttribute("name", student.getName());
model.addAttribute("age", student.getAge());
model.addAttribute("id", student.getId());
return "result";
}
}
?
配置HibernateValidator-servlet.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<context:component-scan base-package="com.yiibai.springmvc" />
<mvc:annotation-driven />
<!--动态加载propertites文件内容-->
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
id="messageSource">
<!-- 指定资源文件基名称 jdbc为文件名,不包含扩展名
其中Value的值 为properties文件的文件名,不包括扩展名
如果使用property属性,就需要创建propertity文件-->
<property name="basename" value="messages"/>
</bean>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
编写jsp表单
<body>
<h2>学生信息</h2>
<form:form method="POST" action="addStudent"commandName="student">
<table>
<tr>
<td><form:label path="name">姓名:</form:label></td>
<td><form:input path="name" /></td>
<td><form:errors path="name" cssClass="error" /></td>
</tr>
<tr>
<td><form:label path="age">年龄:</form:label></td>
<td><form:input path="age" /></td>
<td><form:errors path="age" cssClass="error" /></td>
</tr>
<tr>
<td><form:label path="id">编号:</form:label></td>
<td><form:input path="id" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交" /></td>
</tr>
</table>
</form:form>
</body>
然后jsp页面还是之前的页面,验证效果如下,这种方法明显简单多了
一.基于Validator接口的验证.
首先创建User实例,并加入几个属性?
?
?
最后随便写一个jsp页面实现校检
?
前面实现的是局部校验,只对当前控制器有效,如果要实现全局校验的话需要配置springMVC.xml文件
?
3.定义自己的Annotation Validator
这部分直接从大牛那拷贝过来的.除了JSR-303原生支持的限制类型之外我们还可以定义自己的限制类型。定义自己的限制类型首先我们得定义一个该种限制类型的注解,而且该注解需要使用@Constraint标注。现在假设我们需要定义一个表示金额的限制类型,那么我们可以这样定义:
?
在定义了限制类型Money之后,接下来就是定义我们的限制类型校验类MoneyValidator了。限制类型校验类必须实现接口javax.validation.ConstraintValidator,并实现它的initialize和isValid方法。我们先来看一下MoneyValidator的代码示例:
?
?
?
?
相关文章推荐
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
- SpringMVC和FreeMarker整合Hibernate-validator在页面渲染校验错误信息
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
- SpringMVC集成Hibernate Validator进行参数校验
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- springmvc使用hibernate-validator校验框架实现后端校验
- 使用JS对form的内容验证失败后阻止提交 &&js校验表单后提交表单的三种方法总结
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- SpringMVC集成Hibernate Validator进行注解式的参数校验——让代码更少、更加专注于业务逻辑
- 整合Spring MVC,mybatis,hibernate,freemarker框架实现的自定义注解Validator验证机制实现对敏感词过滤的代码分享
- springMVC校验之hibernate validator校验器的使用
- 使用hibernate-validator进行验证时与tomcat产生的方法冲突问题【NoSuchMethodError】
- Hibernate Validator 校验方法的参数,返回值,构造函数
- hibernate4+spring3.1整合常见问题解决方法
- js和php邮箱地址验证的实现方法
- js对字符的验证方法汇总
- springBoot整合CXF并实现用户名密码校验的方法
- 防止SpringMVC拦截器拦截js等静态资源文件的解决方法
- Spring+hibernate+springmvc 整合(六)