真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringMVCInitBinder驗(yàn)證方法

使用InitBinder做驗(yàn)證的情況一般會(huì)在此Controller中提交的數(shù)據(jù)需要有一些是業(yè)務(wù)性質(zhì)的,也即比較復(fù)雜的驗(yàn)證情況下才會(huì)使用。大部份簡單的表單驗(yàn)證,使用annotation驗(yàn)證即可以解決。

麻江網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),麻江網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為麻江上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的麻江做網(wǎng)站的公司定做!

Annotation驗(yàn)證使用方法可參見:https://www.jb51.net/article/136448.htm

這里需要注意的一點(diǎn):InitBinder和Annotation兩種驗(yàn)證只能二選一,如果使用了InitBinder,就不能使用Annotation驗(yàn)證。

前面的web.xml和spring.xml的配置就不再重復(fù),可參見上面鏈接中的配置。一模一樣。

直接上代碼:

1、User5 model實(shí)體類

package com.my.controller.bean;
import java.util.Date;
public class User5 {
  
  private long id;
  private String name;
  private String password;
  private Date createTime;
  private int age;
  
  public long getId() {
    return id;
  }
  public void setId(long id) {
    this.id = id;
  }
  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 Date getCreateTime() {
    return createTime;
  }
  public void setCreateTime(Date createTime) {
    this.createTime = createTime;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
}

2、新增一個(gè)Validator:

package com.my.controller.validator;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import com.my.controller.bean.User5;

@Component
public class TestValidator implements Validator {

  @Override
  public boolean supports(Class<?> paramClass) {
    return User5.class.equals(paramClass);
  }

  @Override
  public void validate(Object obj, Errors errors) {
    User5 user = (User5) obj;
    
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "valid.name", null, "");
    
    if(user.getAge() < 18) {
      errors.rejectValue("age", "valid.ageMin", new Object[]{"age" ,18}, "年齡不能小于{1}歲");
    }
  }
}

這里需要加入@Component,注入DI

3、Controller

package com.my.controller;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.Validator;
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.my.controller.bean.User5;
@Controller
@RequestMapping(value="binder")
public class TestInitBinderController {
  
  @Autowired
  @Qualifier(value="testValidator")
  private Validator validator;
  
  @InitBinder
  private void initBinder(WebDataBinder binder) {
    binder.setValidator(validator);
  }
  
  @RequestMapping(method=RequestMethod.GET)
  public String index() {
    return "/TestInitBinder/index";
  }
  
  @RequestMapping(value="add", method=RequestMethod.POST)
  public ModelAndView add(@ModelAttribute @Valid User5 user, BindingResult result) {
    ModelAndView view = new ModelAndView("TestInitBinder/index");
    view.addObject("user", user);
    
    if(result.hasErrors()) {
      List errs = result.getFieldErrors();
      Map mapErrors = new LinkedHashMap();
      for(FieldError err : errs) {
        System.out.println("ObjectName:" + err.getObjectName() + "\tFieldName:" + err.getField()
            + "\tFieldValue:" + err.getRejectedValue() + "\tMessage:" + err.getDefaultMessage());
        mapErrors.put(err.getField(), err.getDefaultMessage());
        view.addObject("errors", mapErrors);
      }
      return view;
    }
    return view;
  }
}

把Validator注入到Controller中。

事實(shí)上,使用InitBinder,在add controller中的err.getDefaultMessage()方法是取不到對(duì)應(yīng)正確的message的??梢钥醋詈蟮妮斎氪蛴〗Y(jié)果。

4、View

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="st" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>




Init binder


  
    User name:
Password:
Age:

Error:

注意,這里只能使用來取得錯(cuò)誤信息,且,這個(gè)一定要在當(dāng)中。

5、結(jié)果測(cè)試

Spring MVC InitBinder驗(yàn)證方法

點(diǎn)擊Add button:

Spring MVC InitBinder驗(yàn)證方法

打印輸出:

Spring MVC InitBinder驗(yàn)證方法

可以看到,這里取不到錯(cuò)誤的正確信息

事實(shí)上,在一個(gè)非常復(fù)雜表單頁面,里頭所提交的數(shù)據(jù)驗(yàn)證有一定的業(yè)務(wù)邏輯性時(shí),InitBinder應(yīng)該都不多用,因?yàn)楹芏鄷r(shí)候我們可以使用一個(gè)Map,把errors插入進(jìn)去,在頁面讀取即可。比如:

Map errors;
errors.add("name", "user name can NOT be empty!");
:
:

頁面中只需要使用:

${errors.name}

即可。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


分享文章:SpringMVCInitBinder驗(yàn)證方法
標(biāo)題鏈接:http://weahome.cn/article/geoiog.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部