검증을 위해 Initbinder를 사용하는 경우이 컨트롤러에 제출 된 일부 데이터는 비즈니스 특성이어야합니다. 즉, 비교적 복잡한 검증 상황에서만 사용됩니다. 주석 검증을 사용하여 가장 간단한 양식 검증을 해결할 수 있습니다.
주석 검증의 사용에 대해서는 http://www.vevb.com/article/136448.htm을 참조하십시오.
여기에 주목해야 할 사항 : Initbinder와 주석은 두 가지 검증 중 하나만 선택할 수 있습니다. Initbinder를 사용하는 경우 주석 검증을 사용할 수 없습니다.
Web.xml 및 Spring.xml의 이전 구성은 반복되지 않습니다. 위 링크의 구성을 참조하십시오. 정확히 동일합니다.
코드를 직접 업로드하십시오.
1. user5 모델 엔티티 클래스
package com.my.controller.bean; import java.util.date; public class user5 {private long id; 개인 문자열 이름; 개인 문자열 비밀번호; 개인 날짜 CreateTime; 사적인 int 연령; public long getid () {return id; } public void setId (long id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } public String getPassword () {return password; } public void setpassword (문자열 비밀번호) {this.password = password; } 공개 날짜 getCreateTime () {return createTime; } public void setCreateTime (Date CreateTime) {this.createTime = createTime; } public int getage () {반환 연령; } public void 설정 (int Age) {this.age = age; }}2. 새 유효성 검사기 추가 :
package com.my.controller.validator; import org.springframework.stereotyp.component; import org.springframework.validation.errors; import org.springframework.validation.validationutils; import org.springframework.validator; validator; com.my.controller.bean.user5; @componentpublic class testValidator empalments {@override public boolean supports (class <?> paramclass) {return user5.class.equals (paramclass); } @override public void validate (오브젝트 obj, 오류 오류) {user5 user = (user5) obj; validationUtils.RejectIfeMptYorWhitEspace (오류, "이름", "valid.name", null, ""); if (user.getage () <18) {errors.rejectvalue ( "age", "valid.agemin", new Object [] { "age", 18}, "나이가 {1} 년보다 작을 수 없음"); }}}@Component가 여기에 추가해야하며 DI가 주입됩니다.
3. 컨트롤러
package com.my.controller; import java.util.linkedhashmap; import java.util.list; import java.util.map; import javax.validation.valid; import org.springframework.beans.beans.annotation.autowired; import org.springframework.beans org.springframework.stereotyp.controller; import org.springframework.validation.bindingresult; import org.springframework.validation.fielderror; import org.springframework.validation.validator; import org.springframework.bind.bind.webdatabind org.springframework.web.bind.annotation.initbinder; import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.bind.bind.antotation.requestmod; org.springframework.web.servlet.modelandview; import com.my.controller.bean.user5; @controller @requestmapping (value = "binder") public class testinitbindercontroller {@autowired @qualifier (value = "testValidator") 개인 유효기 검증자; @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.adoBject ( "사용자", 사용자); 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 :" + restaultMessage ()); mapErrors.put (err.getfield (), err.getDefaultMessage ()); view.adoBject ( "오류", MapErrors); } 리턴 뷰; } 리턴 뷰; }}컨트롤러에 유효성 검사기를 주입하십시오.
실제로, initBinder를 사용하여 ADD 컨트롤러의 err.getDefaultMessage () 메소드는 해당 올바른 메시지를 얻을 수 없습니다. 최종 입력 인쇄 결과를 볼 수 있습니다.
4.보기
<%@ page language = "java"contmenttype = "text/html; charset = utf-8"pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core"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 // "http://www.w3.org/tr/tr/tr/html4/loose.dtd"> html> html> http-quiv ="content-type "content ="text/html; charset = utf-8 "> <title> init binder </head> <<양식 : 양식 : 양식 :"/test "/tests"/chects "/chects = utf-8"> <title> init binder </head> <body " 메소드 = "post"modelAttribute = "user5"> 사용자 이름 : <입력 유형 = "text"id = "name"name = "name"value = "$ {user.name}" /> <br/> password : <입력 유형 "ID ="password "name ="valess "valess ="$ {user.password} "/> age : <input" "Id put" value = "$ {user.age}"/> <br/> <input type = "제출"value = "add"/> <hr/> 오류 : <br/> <form : errors path = "*"> </form : errors> </form : form> </body> </html> </html><form : errors/> 만 사용하여 오류 정보를 얻을 수 있으며,이 <양식 : errors/>는 <form : form/>이어야합니다.
5. 결과 테스트
추가 버튼을 클릭하십시오 :
출력 :
여기에서 오류의 올바른 정보를 얻을 수 없음을 알 수 있습니다.
실제로, 매우 복잡한 양식 페이지에 제출 된 데이터에 특정 비즈니스 로직이있는 경우, Initbinder는 많이 사용해서는 안됩니다. 여러 번 맵을 사용하여 오류를 삽입하여 페이지에서 읽을 수 있기 때문입니다. 예를 들어:
맵 <문자열, 문자열> 오류;
errors.add ( "이름", "사용자 이름이 비어있을 수 없습니다!");
:
:
사용하면됩니다.
<span style = "color : red;"> $ {errors.name} <span>그냥 해요.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.