最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中WebDataBinder使用詳解

 更新時(shí)間:2017年07月05日 10:06:07   作者:無(wú)名小卒升級(jí)中  
這篇文章主要為大家詳細(xì)介紹了Spring中WebDataBinder的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Spring MVC Validator @InitBinder and WebDataBinder;Validator是一個(gè)用來(lái)我們自定義驗(yàn)證的sping接口,WebDataBinder 綁定你的自定義參數(shù),你直接在你的控制器類(lèi)中通過(guò)@InitBinder 注解的方式配置 Web 數(shù)據(jù)綁定.registerCustomEditor()是一個(gè)屬性編輯器,比如自定義的日期編輯它綁定web請(qǐng)求參數(shù)到JavaBean的屬性;

下面一個(gè)例子,我們創(chuàng)建一個(gè)JavaBean(username, password, email and date of birth of a user),我們創(chuàng)建兩個(gè)自定義的驗(yàn)證類(lèi).第一個(gè),我們驗(yàn)證用戶(hù)名和密碼.第二個(gè),驗(yàn)證郵箱,

在Eclipse中Demo的結(jié)構(gòu)


Validator 是一個(gè)有兩個(gè)方法的接口;

boolean supports(Class<?> clazz) : 檢驗(yàn)參數(shù)是否驗(yàn)證成功的實(shí)例類(lèi);

void validate(Object target, Errors errors) : 如果 supports() 方法返回真,  target object 合法. Errors.rejectValue() 方法用一個(gè)字段名注冊(cè)錯(cuò)誤信息;

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頁(yè)面表單

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • @RequestMapping 如何使用@PathVariable 從URI中獲取參數(shù)

    @RequestMapping 如何使用@PathVariable 從URI中獲取參數(shù)

    這篇文章主要介紹了@RequestMapping 如何使用@PathVariable 從URI中獲取參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)

    Eclipse添加xml文件提示及Hibernate配置學(xué)習(xí)

    文件提示功能在開(kāi)發(fā)過(guò)程中很實(shí)用的,本文實(shí)現(xiàn)了一個(gè)Eclipse添加xml文件提示,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助
    2013-01-01
  • RocketMQ的兩種消費(fèi)模式詳解

    RocketMQ的兩種消費(fèi)模式詳解

    這篇文章主要介紹了RocketMQ的兩種消費(fèi)模式詳解,RocketMQ主要提供了兩種消費(fèi)模式,集群消費(fèi)以及廣播消費(fèi),我們只需要在定義消費(fèi)者的時(shí)候通過(guò)setMessageModel(MessageModel.XXX),需要的朋友可以參考下
    2023-10-10
  • java讀取解析xml文件實(shí)例

    java讀取解析xml文件實(shí)例

    這篇文章主要介紹了java讀取解析xml文件實(shí)例,本文創(chuàng)建了一個(gè)XML解析類(lèi)同時(shí)講解了循環(huán)節(jié)點(diǎn)輸出方式,需要的朋友可以參考下
    2015-03-03
  • SpringMVC數(shù)據(jù)校驗(yàn)+VO++脫敏實(shí)戰(zhàn)指南

    SpringMVC數(shù)據(jù)校驗(yàn)+VO++脫敏實(shí)戰(zhàn)指南

    SpringMVC通過(guò)整合BeanValidation規(guī)范,提供靈活的數(shù)據(jù)校驗(yàn)機(jī)制,核心步驟包括添加校驗(yàn)注解、使用@Valid觸發(fā)校驗(yàn)、捕獲錯(cuò)誤,可選擴(kuò)展,文章還介紹了全局異常處理、自定義校驗(yàn)注解以及VO層的使用,感興趣的朋友一起看看吧
    2025-03-03
  • SpringBoot?MDC全局鏈路最新完美解決方案

    SpringBoot?MDC全局鏈路最新完美解決方案

    MDC 在 Spring Boot 中的作用是為日志事件提供上下文信息,并將其與特定的請(qǐng)求、線程或操作關(guān)聯(lián)起來(lái),通過(guò)使用 MDC,可以更好地理解和分析日志,并在多線程環(huán)境中確保日志的準(zhǔn)確性和一致性,這篇文章主要介紹了SpringBoot?MDC全局鏈路解決方案,需要的朋友可以參考下
    2023-08-08
  • java自定義枚舉轉(zhuǎn)換器示例

    java自定義枚舉轉(zhuǎn)換器示例

    這篇文章主要介紹了java自定義枚舉轉(zhuǎn)換器示例,需要的朋友可以參考下
    2014-05-05
  • Java 內(nèi)部類(lèi)的定義與范例

    Java 內(nèi)部類(lèi)的定義與范例

    說(shuō)起內(nèi)部類(lèi)這個(gè)詞,想必很多人都不陌生,但是又會(huì)覺(jué)得不熟悉。原因是平時(shí)編寫(xiě)代碼時(shí)可能用到的場(chǎng)景不多,用得最多的是在有事件監(jiān)聽(tīng)的情況下,并且即使用到也很少去總結(jié)內(nèi)部類(lèi)的用法。今天我們就來(lái)一探究竟
    2021-11-11
  • BigDecimal divide除法除不盡報(bào)錯(cuò)的問(wèn)題及解決

    BigDecimal divide除法除不盡報(bào)錯(cuò)的問(wèn)題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報(bào)錯(cuò)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問(wèn)計(jì)數(shù)示例代碼

    Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問(wèn)計(jì)數(shù)示例代碼

    這篇文章主要介紹了Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問(wèn)計(jì)數(shù)Demo,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

泗水县| 苍梧县| 察雅县| 依兰县| 平和县| 中宁县| 峨眉山市| 正阳县| 乌恰县| 蚌埠市| 韶山市| 陆良县| 嘉黎县| 克拉玛依市| 溆浦县| 府谷县| 阿瓦提县| 偏关县| 富宁县| 休宁县| 韶山市| 中山市| 根河市| 苏尼特左旗| 黄大仙区| 鹰潭市| 玉屏| 瑞安市| 出国| 绥阳县| 屯昌县| 碌曲县| 鲜城| 闽清县| 兴安盟| 靖边县| 宁河县| 科尔| 安龙县| 广德县| 盱眙县|