zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Retrofit 传递json 和 复杂参数类型List<T>
    Android Activity has leaked window that was originally added
    Android 集成GoogleMap,实现定位和获取位置信息
    Android 新浪微博开放平台应用 android签名怎么获得
    Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so
    Android 微信第三方登录
    Android RxVolley = Volley + RxJava + OkHttp
    Android 微博sdk接入授权指南
    Android之通过配置Flavor实现一个项目打包成多个apk
    Android第三方登陆之新浪微博Weibo篇(原生登陆授权)
  • 原文地址:https://www.cnblogs.com/entrepre/p/7116715.html
Copyright © 2011-2022 走看看