Spring MVC InitBinder 검증 방법
7969 단어 SpringMVCInitBinder
Annotation 검증 사용 방법 참조:https://www.jb51.net/article/136448.htm
여기 서 주의해 야 할 점 은 InitBinder 와 Annotation 두 가지 검증 은 둘 중 하나 만 선택 할 수 있 습 니 다.InitBinder 를 사용 하면 Annotation 검증 을 사용 할 수 없습니다.
앞의 웹.xml 과 spring.xml 의 설정 은 중복 되 지 않 습 니 다.위 링크 의 설정 을 참조 할 수 있 습 니 다.똑같다.
직접 코드 올 리 기:
1.User 5 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 {
@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<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()방법 은 올 바른 message 를 찾 을 수 없습니다.마지막 입력 인쇄 결 과 를 볼 수 있 습 니 다.
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>
이5.결과 테스트
추가 버튼 을 클릭 합 니 다:
출력 출력:
잘못된 정 보 를 찾 을 수 없습니다.
사실 매우 복잡 한 폼 페이지 에서 제출 한 데이터 검증 이 일정한 업무 논리성 을 가지 고 있 을 때 InitBinder 는 많이 사용 하지 않 을 것 입 니 다.왜냐하면 우 리 는 하나의 Map 을 사용 하여 errors 를 삽입 하여 페이지 에서 읽 으 면 되 기 때 문 입 니 다.예 를 들 면:
Map
errors.add("name", "user name can NOT be empty!");
:
:
페이지 에서 사용 하기:
<span style="color:red;">${errors.name}<span>
됐다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.