Spring中WebDataBinder使用详解

 更新时间:2017年07月05日 10:06:07   作者:无名小卒升级中  
这篇文章主要为大家详细介绍了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

package com.concretepage.validators;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.concretepage.User;
@Component
public class UserValidator implements Validator {
  @Override
  public boolean supports(Class<?> clazz) {
    return User.class.isAssignableFrom(clazz);
  }
  @Override
  public void validate(Object target, Errors errors) {
    User user = (User)target;
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "","Username is empty");
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "", "Password is empty");
    if (user.getName().length()<5) {
      errors.rejectValue("name","", "Username length is less than 5");
    }
  }
} 

EmailValidator.java

package com.concretepage.validators;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.concretepage.User;
@Component
public class EmailValidator implements Validator {
  @Override
  public boolean supports(Class<?> clazz) {
    return User.class.isAssignableFrom(clazz);
  }
  @Override
  public void validate(Object target, Errors errors) {
    User user = (User)target;
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "","Email is empty");
    if (!user.getEmail().contains("@")) {
      errors.rejectValue("email","", "Email is not valid.");
    }
  }
} 

User.java

package com.concretepage;
import java.util.Date;
public class User {
  private String name;
  private String password;
  private String email;
  private Date dob;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }
  public Date getDob() {
    return dob;
  }
  public void setDob(Date dob) {
    this.dob = dob;
  }
} 

MyWorldController

package com.concretepage;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.concretepage.validators.EmailValidator;
import com.concretepage.validators.UserValidator;
@Controller
@RequestMapping("/myworld")
public class MyWorldController {
  @Autowired
  private UserValidator userValidator;
  @Autowired
  private EmailValidator emailValidator;

  @RequestMapping(value="signup", method = RequestMethod.GET)
  public ModelAndView user(){
    return new ModelAndView("user","user",new User());
  }
  @InitBinder
  public void dataBinding(WebDataBinder binder) {
    binder.addValidators(userValidator, emailValidator);
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    dateFormat.setLenient(false);
    binder.registerCustomEditor(Date.class, "dob", new CustomDateEditor(dateFormat, true));
  }
  
  @RequestMapping(value="save", method = RequestMethod.POST)
  public String createUser(@ModelAttribute("user") @Valid User user,BindingResult result, ModelMap model) {
    if(result.hasErrors()) {
      return "user";
    }
    System.out.println("Name:"+ user.getName());
    System.out.println("Email:"+ user.getEmail());
    System.out.println("Date of Birth:"+ user.getDob());
    model.addAttribute("msg", "Welcome to My World!");
    return "success";
  }  
}

Form页面表单

<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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Spring中@RestControllerAdvice注解的使用详解

    Spring中@RestControllerAdvice注解的使用详解

    这篇文章主要介绍了Spring中@RestControllerAdvice注解的使用详解,@RestControllerAdvice是一个组合注解,由@ControllerAdvice、@ResponseBody组成,而@ControllerAdvice继承了@Component,需要的朋友可以参考下
    2024-01-01
  • MybatisPlus关联查询的完美实现方案

    MybatisPlus关联查询的完美实现方案

    我们在项目开发的时候,难免会遇到连表查询的操作,所以下面这篇文章主要给大家介绍了关于MybatisPlus关联查询的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-12-12
  • Java语言实现简单FTP软件 FTP连接管理模块实现(8)

    Java语言实现简单FTP软件 FTP连接管理模块实现(8)

    这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP连接管理模块的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Python文件高级操作函数之文件信息获取与目录操作

    Python文件高级操作函数之文件信息获取与目录操作

    这篇文章主要介绍了Python文件高级操作函数之文件信息获取与目录操作,在Python中,内置了文件(File)对象。在使用文件对象时,首先需要通过内置的open()方法创建一个文件对象,然后通过该对象提供的方法进行一些基本文件操作,需要的朋友可以参考下
    2023-05-05
  • Java AES加密和解密教程

    Java AES加密和解密教程

    这篇文章主要介绍了Java AES加密和解密的相关资料,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-12-12
  • Java多线程之FutureTask的介绍及使用

    Java多线程之FutureTask的介绍及使用

    之前介绍了线程池相关的对象,Runable Callable与Future,下面介绍FutureTask的作用,它的特性是怎样的呢,需要的朋友可以参考下
    2021-06-06
  • SpringBoot的Admin服务监控详解

    SpringBoot的Admin服务监控详解

    这篇文章主要介绍了SpringBoot的Admin服务监控详解,Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序,需要的朋友可以参考下
    2024-01-01
  • Java Web十条开发实用小知识

    Java Web十条开发实用小知识

    这篇文章主要介绍了Java Web十条开发实用小知识的相关资料,需要的朋友可以参考下
    2016-05-05
  • Java正则表达式匹配电话格式

    Java正则表达式匹配电话格式

    正则表达式是由普通的字符以及特殊字符组成的文字模式,用来在查找文字主体时待匹配的一个或多个字符串。本文给大家介绍java正则表达式匹配电话格式,对java正则表达式匹配相关知识感兴趣的朋友一起学习吧
    2015-11-11
  • Hibernate一对多关联双向关联代码实现分享

    Hibernate一对多关联双向关联代码实现分享

    Hibernate一对多关联双向关联代码实现分享,大家参考使用吧
    2013-12-12

最新评论