Spring中的WebDataBinder

    Spring MVC Validator @InitBinder and WebDataBinder;Validator是一个用来我们自定义验证的sping接口,WebDataBinder 绑定你的自定义参数,你直接在你的控制器类中通过@InitBinder 注解的方式配置 Web 数据绑定.registerCustomEditor()是一个属性编辑器,比如自定义的日期编辑它绑定web请求参数到JavaBean的属性;

   下面一个例子,我们创建一个JavaBean(username, password, email and date of birth of a user),我们创建两个自定义的验证类.第一个,我们验证用户名和密码.第二个,验证邮箱,

 

在Eclipse中Demo的结构


 

 

Validator 是一个有两个方法的接口;
boolean supports(Class<?> clazz) : 检验参数是否验证成功的实例类;
void validate(Object target, Errors errors) : 如果 supports() 方法返回真,  target object 合法. Errors.rejectValue() 方法用一个字段名注册错误信息;

Uservalidator.java
 1 package com.concretepage.validators;
 2 import org.springframework.stereotype.Component;
 3 import org.springframework.validation.Errors;
 4 import org.springframework.validation.ValidationUtils;
 5 import org.springframework.validation.Validator;
 6 import com.concretepage.User;
 7 @Component
 8 public class UserValidator implements Validator  {
 9     @Override
10     public boolean supports(Class<?> clazz) {
11         return User.class.isAssignableFrom(clazz);
12     }
13     @Override
14     public void validate(Object target, Errors errors) {
15         User user = (User)target;
16         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "","Username is empty");
17         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "", "Password is empty");
18         if (user.getName().length()<5) {
19             errors.rejectValue("name","", "Username length is less than 5");
20         }
21     }
22 } 
UserValidator.java
EmailValidator.java
 1 package com.concretepage.validators;
 2 import org.springframework.stereotype.Component;
 3 import org.springframework.validation.Errors;
 4 import org.springframework.validation.ValidationUtils;
 5 import org.springframework.validation.Validator;
 6 import com.concretepage.User;
 7 @Component
 8 public class EmailValidator implements Validator {
 9     @Override
10     public boolean supports(Class<?> clazz) {
11         return User.class.isAssignableFrom(clazz);
12     }
13     @Override
14     public void validate(Object target, Errors errors) {
15         User user = (User)target;
16         ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "","Email is empty");
17         if (!user.getEmail().contains("@")) {
18             errors.rejectValue("email","", "Email is not valid.");
19         }
20     }
21 } 
EmailValidator.java
User.java
 1 package com.concretepage;
 2 import java.util.Date;
 3 public class User {
 4     private String name;
 5     private String password;
 6     private String email;
 7     private Date dob;
 8     public String getName() {
 9         return name;
10     }
11     public void setName(String name) {
12         this.name = name;
13     }
14     public String getPassword() {
15         return password;
16     }
17     public void setPassword(String password) {
18         this.password = password;
19     }
20     public String getEmail() {
21         return email;
22     }
23     public void setEmail(String email) {
24         this.email = email;
25     }
26     public Date getDob() {
27         return dob;
28     }
29     public void setDob(Date dob) {
30         this.dob = dob;
31     }
32 } 
User.java
MyWorldController
 1 package com.concretepage;
 2 import java.text.SimpleDateFormat;
 3 import java.util.Date;
 4 
 5 import javax.validation.Valid;
 6 
 7 import org.springframework.beans.factory.annotation.Autowired;
 8 import org.springframework.beans.propertyeditors.CustomDateEditor;
 9 import org.springframework.stereotype.Controller;
10 import org.springframework.ui.ModelMap;
11 import org.springframework.validation.BindingResult;
12 import org.springframework.web.bind.WebDataBinder;
13 import org.springframework.web.bind.annotation.InitBinder;
14 import org.springframework.web.bind.annotation.ModelAttribute;
15 import org.springframework.web.bind.annotation.RequestMapping;
16 import org.springframework.web.bind.annotation.RequestMethod;
17 import org.springframework.web.servlet.ModelAndView;
18 
19 import com.concretepage.validators.EmailValidator;
20 import com.concretepage.validators.UserValidator;
21 @Controller
22 @RequestMapping("/myworld")
23 public class MyWorldController {
24     @Autowired
25     private UserValidator userValidator;
26     @Autowired
27     private EmailValidator emailValidator;
28 
29     @RequestMapping(value="signup", method = RequestMethod.GET)
30     public ModelAndView user(){
31         return new ModelAndView("user","user",new User());
32     }
33     @InitBinder
34     public void dataBinding(WebDataBinder binder) {
35         binder.addValidators(userValidator, emailValidator);
36         SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
37         dateFormat.setLenient(false);
38         binder.registerCustomEditor(Date.class, "dob", new CustomDateEditor(dateFormat, true));
39     }
40     
41     @RequestMapping(value="save", method = RequestMethod.POST)
42     public String createUser(@ModelAttribute("user") @Valid User user,BindingResult result, ModelMap model) {
43         if(result.hasErrors()) {
44             return "user";
45         }
46         System.out.println("Name:"+ user.getName());
47         System.out.println("Email:"+ user.getEmail());
48         System.out.println("Date of Birth:"+ user.getDob());
49         model.addAttribute("msg", "Welcome to My World!");
50         return "success";
51     }    
52 }
MyWorldController
页面表单
  <form:form action="save" method="post" commandName="user">
    <tr>  <td>User Name:</td> <td><form:input  path="name"/> </td> 
          <td> <form:errors path="name" cssStyle="color: red;"/></td> </tr>
    <tr> <td> Password :</td> <td><form:input path="password"/> </td> 
         <td> <form:errors path="password" cssStyle="color: red;"/> </td> </tr>
    <tr> <td>  Email :</td> <td><form:input path="email"/> </td> 
         <td> <form:errors path="email" cssStyle="color: red;"/> </td> </tr>
    <tr> <td>  Date of Birth :</td> <td><form:input path="dob"/> </td> 
         <td> <form:errors path="dob" cssStyle="color: red;"/> </td> </tr>         
    <tr> <td colspan=3>   <input type="submit"> </td>
  </form:form>
Form

 

posted on 2017-07-04 15:00  无名小卒升级中  阅读(3961)  评论(0编辑  收藏  举报

导航