SpringMVC整合Hibernate Validator验证方法与js校验
来源:互联网 发布:追风打印软件 编辑:程序博客网 时间:2024/06/07 07:23
SpringMVC服务器验证一种是有两种方式,一种是基于Validator接口,一种是使用Annotaion JSR-303标准的验证,下面主要是学习这两种,工作中推荐后者,方便很多
使用Annotaion JSR-303标准的验证,需要页面刷新才可以,即当点击提交时,错误才能显示。可以通过js(JavaScript)来实现立即显示错误。
JavaScript 表单验证
JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证。
<html><head><script type="text/javascript">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>
<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
注解 作用
2. Hibernate Validator 附加的 constraint
host=, port=,
regexp=, flags=)被注释的字符串必须是一个有效的url
银行卡,信用卡等号码一般都用Luhn
计算合法性@ScriptAssert
(lang=, script=, alias=)要有Java Scripting API 即JSR 223
("Scripting for the JavaTM Platform")的实现@SafeHtml
(whitelistType=,
additionalTags=)classpath中要有jsoup包
hibernate补充的注解中,最后3个不常用,可忽略。
主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:
@NotNull 任何对象的value不能为null,用在基本类型上
@NotEmpty 集合对象的元素不为0,即集合不为空,也可以用于字符串不为null,用在集合类上面
@NotBlank 只能用于字符串不为null,并且字符串trim()以后length要大于0,用在String上面
然后再控制器里面加入验证就可以了
@Controller
public class StudentController {
@RequestMapping(value = "/addStudent", method = RequestMethod.GET)
public ModelAndView student() {
return new ModelAndView("addStudent", "command", new Student());
}
/**
@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";
}
}
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 />
<bean class="org.springframework.context.support.ResourceBundleMessageSource"
id="messageSource">
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
<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>
一.基于Validator接口的验证.
首先创建User实例,并加入几个属性
接着创建用于校检的类UserValidator,让其实现Validator,覆盖其中的两个方法
上面的类只实现了对密码判断是否为空,为空则注册这一错误信息,也就是”password is null”,接下来要实现控制器,控制器要做的事情,第一是注册这个校验器,第二是实现校验.
前面实现的是局部校验,只对当前控制器有效,如果要实现全局校验的话需要配置springMVC.xml文件
3.定义自己的Annotation Validator
这部分直接从大牛那拷贝过来的.
除了JSR-303原生支持的限制类型之外我们还可以定义自己的限制类型。定义自己的限制类型首先我们得定义一个该种限制类型的注解,而且该注解需要使用@Constraint标注。现在假设我们需要定义一个表示金额的限制类型,那么我们可以这样定义:
从上面代码中我们可以看到ConstraintValidator是使用了泛型的。它一共需要指定两种类型,第一个类型是对应的initialize方法的参数类型,第二个类型是对应的isValid方法的第一个参数类型。从上面的两个方法我们可以看出isValid方法是用于进行校验的,有时候我们在校验的过程中是需要取当前的限制类型的属性来进行校验的,比如我们在对@Min限制类型进行校验的时候我们是需要通过其value属性获取到当前校验类型定义的最小值的,我们可以看到isValid方法无法获取到当前的限制类型Money。这个时候initialize方法的作用就出来了。我们知道initialize方法是可以获取到当前的限制类型的,所以当我们在校验某种限制类型时需要获取当前限制类型的某种属性的时候,我们可以给当前的ConstraintValidator定义对应的属性,然后在initialize方法中给该属性赋值,接下来我们就可以在isValid方法中使用其对应的属性了。针对于这种情况我们来看一个代码示例,现在假设我要定义自己的@Min限制类型和对应的MinValidator校验器,那么我可以如下定义:
MinValidator校验器
继续来说一下ConstraintValidator泛型的第二个类型,我们已经知道它的第二个类型是对应的isValid的方法的第一个参数,从我给的参数名称value来看也可以知道isValid方法的第一个参数正是对应的当前需要校验的数据的值,而它的类型也正是对应的我们需要校验的数据的数据类型。这两者的数据类型必须保持一致,否则Spring会提示找不到对应数据类型的ConstraintValidator。建立了自己的限制类型及其对应的ConstraintValidator后,其用法跟标准的JSR-303限制类型是一样的。以下就是使用了上述自己定义的JSR-303限制类型——Money限制和Min限制的一个实体类:
<code
class
=
"hljs cs"
>
public
class
User {
private
int
age;
private
Double salary;
@Min
(value=
8
, message=
"年龄不能小于8岁"
)
public
int
getAge() {
return
age;
}
public
void
setAge(
int
age) {
this
.age = age;
}
@Money
(message=
"标准的金额形式为xxx.xx"
)
public
Double getSalary() {
return
salary;
}
public
void
setSalary(Double salary) {
this
.salary = salary;
}
}</code>
- SpringMVC整合Hibernate Validator验证方法与js校验
- springMvc 整合hibernate-validator
- jfinal整合Hibernate-validator校验框架
- springmvc使用hibernate-validator校验器
- springMVC结合hibernate validator校验数据
- SpringMVC+FastJson+hibernate-validator整合完整示例
- springMVC校验之hibernate validator校验器的使用
- springmvc使用hibernate-validator校验框架实现后端校验
- springMVC Hibernate Validator验证框架的使用
- SpringMVC Validator分组校验
- SpringMVC学习系列-后记 结合SpringMVC和Hibernate-validator,根据后台验证规则自动生成前台的js验证代码
- Hibernate-validator校验框架
- Hibernate-validator校验框架
- Hibernate Validator参数校验
- Hibernate-validator校验框架
- Hibernate-validator校验框架
- Hibernate-validator校验框架
- SpringMVC与Hibernate整合
- 【学习】kudu、Impala、交互式查询
- MVC 使用cshtml的一些基础知识-和相关整理
- 使用AppBarLayout+CollapsingToolbarLayout实现自定义工具栏折叠效果
- MUI框架(2)
- JavaScript对象(2)——创建对象
- SpringMVC整合Hibernate Validator验证方法与js校验
- 文章标题
- FCC-Basic Algorithm Scripting
- Linux内核分析-9/进程的调度时机
- Java设计模式之创建型模式
- Maven总结
- Android实时监听并回应
- master-slave模式
- Ubuntu14.04下安装docker 1.9