SpringMVC_18_JSR303資料校驗 和 提示訊息的國際化
阿新 • • 發佈:2019-01-07
作用,在註冊介面判斷你的註冊資料是否合法,比如是否符合一個基本的郵箱格式。
-
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>