日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[Spring MVC] - InitBinder验证

發(fā)布時間:2023/12/4 javascript 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Spring MVC] - InitBinder验证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Spring MVC使用InitBinder驗證:

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

Annotation驗證使用方法可參見:http://www.cnblogs.com/HD/p/4123146.html

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

?

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

直接上代碼:

?

1、User5 model實體類

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、新增一個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 {@Overridepublic boolean supports(Class<?> paramClass) {return User5.class.equals(paramClass);}@Overridepublic 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;@InitBinderprivate 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<FieldError> errs = result.getFieldErrors();Map<String, String> mapErrors = new LinkedHashMap<String, String>();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中。

事實上,使用InitBinder,在add controller中的err.getDefaultMessage()方法是取不到對應(yīng)正確的message的。可以看最后的輸入打印結(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"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Init binder</title> </head> <body><form:form action="/TestSpringMvc1/binder/add" method="post" modelAttribute="user5">User name:<input type="text" id="name" name="name" value="${user.name}" /><br/>Password:<input type="text" id="password" name="password" value="${user.password}" /><br/>Age:<input type="text" id="age" name="age" value="${user.age}" /><br/><input type="submit" value="Add"/><hr/>Error:<br/><form:errors path="*"></form:errors></form:form> </body> </html>

注意,這里只能使用<form:errors />來取得錯誤信息,且,這個<form:errors/>一定要在<form:form/>當(dāng)中。

?

5、結(jié)果測試

點擊Add button:

?

打印輸出:

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


?

?

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

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

頁面中只需要使用:

<span style="color:red;">${errors.name}<span>

即可。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的[Spring MVC] - InitBinder验证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。