作用,在注册界面判断你的注册数据是否合法,比如是否符合一个基本的邮箱格式。
-
JSR 303 是Java为Bean数据合法性校验提供的标准框架,它已经包含在JavaEE6.0中.
-
JSR 303 通过在Bean属性上标注类似于@NotNull、@Max等标准的注解指定校验规则,并通过标准的验证接口对Bean进行验证。
- Hibernate Validator是JSR 303 的一个参考实现,除支持所有标准的校验注解外,它还支持以下的扩展注解
一、如何校验?注解?
①使用JSR 303 验证标准
②加入hibernate validator验证框架的jar包
③在SpringMVC配置文件中添加mvc:annotation-driven/
④需要在bean的属性上添加对应的注解
package com.springmvc.crud.entities;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.format.annotation.NumberFormat;
import javax.validation.constraints.Past;
import java.util.Date;
public class Employee {
private Integer id;
@NotEmpty //注意这里
private String lastName;
@Email //注意这里
private String email;
//1 male 0 female
private Integer gender;
private Department department;
@Past //注意这里
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birth;
@NumberFormat(pattern = "#,###,###.#")
private Float salary;
省略get/set,toString
public Employee(Integer id, String lastName, String email, Integer gender, Department department) {
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
this.department = department;
}
public Employee() {
}
}
⑤在目标方法bean类型的前面添加@valid注解
之前的代码
@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(Employee employee, BindingResult result){
System.out.println(employee);
if(result.getErrorCount()>0){
System.out.println("出错了!");
for(FieldError error:result.getFieldErrors()){
System.out.println(error.getField()+":"+error.getDefaultMessage());
}
}
employeeDao.save(employee);
return "redirect:/emps";
}
现在的代码
@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, BindingResult result){ //注意这里
System.out.println(employee);
if(result.getErrorCount()>0){
System.out.println("出错了!");
for(FieldError error:result.getFieldErrors()){
System.out.println(error.getField()+":"+error.getDefaultMessage());
}
}
employeeDao.save(employee);
return "redirect:/emps";
}
运行结果
二、验证出错转向到哪一个页面?
可以利用BindingResult 当出现了提交错误,在这里处理错误进行转发页面等等。
@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, BindingResult result,
Map<String,Object> map){
System.out.println(employee);
if(result.getErrorCount()>0){
System.out.println("出错了!");
for(FieldError error:result.getFieldErrors()){
System.out.println(error.getField()+":"+error.getDefaultMessage());
}
//若验证出错,则转向定制的页面
map.put("departments",departmentDao.getDepartments());
return "input";
}
employeeDao.save(employee);
return "redirect:/emps";
}
或者
@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(@Valid Employee employee, Errors result, //注意这里的EEors
Map<String,Object> map){
System.out.println(employee);
if(result.getErrorCount()>0){
System.out.println("出错了!");
for(FieldError error:result.getFieldErrors()){
System.out.println(error.getField()+":"+error.getDefaultMessage());
}
//若验证出错,则转向定制的页面
map.put("departments",departmentDao.getDepartments());
return "input";
}
employeeDao.save(employee);
return "redirect:/emps";
}
三、错误消息?如何显示,如何把错误消息进行国际化
错误消息的显示:
在input.jsp页面添加以下标签即可。path="*"的时候意味着显示所有的错误信息。
<form:errors path="*"></form:errors>
要是我们想要错误消息显示到相应的位置呢?只需要在相应的jsp源代码相应的text后面,添加
<form:errors path="指定的名称"></form:errors>
LastName: <form:input path="lastName"/>
<form:errors path="lastName"></form:errors>
Email:<form:input path="email"/>
<form:errors path="email"></form:errors>
Birth:<form:input path="birth"/>
<form:errors path="birth"></form:errors>
by the way:提示消息的国际化
第一步:新建一个i18n.properties
写入国际化的资料
NotEmpty.employee.lastName=^^LastName姓名不能为空
Email.employee.email=Email地址不正确
Past.employee.birth=Birth不能输入一个将来的时间
第二步,在springmvc.xml中配置这个资源文件
<!--配置国际化资源文件-->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>