728x90
test1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form modelAttribute="data" method="post" action="test_proc"> <!-- 앞글자는 소문자 -->
num1 : <form:input path="num1" type="text"/><br>
<form:errors path="num1"/><br>
num2 : <form:input path="num2" type="text"/><br>
<form:errors path="num2"/><br>
num3 : <form:input path="num3" type="text"/><br>
<form:errors path="num3"/><br>
<form:button type="submit">Check</form:button>
</form:form>
</body>
</html>
Data
package kr.bit.beans;
import javax.validation.constraints.*;
public class Data {
@Size(min=4, max=10)
private String num1;
private String num2;
private String num3;
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getNum2() {
return num2;
}
public void setNum2(String num2) {
this.num2 = num2;
}
public String getNum3() {
return num3;
}
public void setNum3(String num3) {
this.num3 = num3;
}
}
1. DataValidator
package kr.bit.validator;
import kr.bit.beans.Data;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
//1. Validator 인터페이스 구현
public class DataValidator implements Validator {
//<validator 커스터마이징>
//1. Validator 인터페이스 구현
//2. 컨트롤러에 인터페이스 등록
@Override
public boolean supports(Class<?> clazz) {
//유효성 검사할 데이터를 가지고 있는 객체가 유효성 검사가 가능한지 확인
return Data.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
//유효성 검사하는 메소드
ValidationUtils.rejectIfEmpty(errors, "num2", "error2");
// num2가 empty면 에러 이름은 error2로 설정함
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "num3", "error3");
Data d=(Data)target;
String str1=d.getNum2();
String str2=d.getNum3();
if(str1.length()>5) {
errors.rejectValue("num2", "error4"); // num2길이가 5자리 넘어가면 error4라는 이름으로 error 정의함
}
if(str2.contains("-")==false) {
errors.rejectValue("num3","error5");
}
}
}
2. Controller
package kr.bit.controller;
import kr.bit.beans.Data;
import kr.bit.validator.DataValidator;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PostMapping;
import javax.validation.Valid;
@Controller
public class SpringController {
@GetMapping("/t1")
public String t1(Data data) {
return "test1";
}
@PostMapping("/test_proc") // 입력한 값 유효성 검사 - > 유효성 검사에 대한 결과값
public String test_proc(@Valid Data data, BindingResult result){
if(result.hasErrors()) {
return "test1";
}
return "test2";
}
@InitBinder
public void initBinder(WebDataBinder binder) { // //2. 컨트롤러에 인터페이스 등록
DataValidator validator = new DataValidator();
// binder.setValidator(validator); 단수인 경우
binder.addValidators(validator); // 복수인 경우
}
}
error.properties
Size.data.num1=Must be 4 to 10 characters long
error2.data.num2=Must be greater than 0 in length
error4.data.num2=Should not exceed 5 characters in length
error3.data.num3=Should be greater than 0 after removing spaces
error5.data.num3=num3 must include a "-" symbol
728x90
'Frameworks > Spring' 카테고리의 다른 글
[Spring] MVC (DB Setting with MyBatis) (2) | 2024.05.12 |
---|---|
[Spring] MVC (Interceptor) (0) | 2024.05.12 |
[Spring] Type of JSR Annotations (0) | 2024.05.10 |
[Spring] MVC (FormTag - path (Radiobutton Checkbox etc..) (1) | 2024.05.09 |
[Spring] MVC (Validation+FormTag / Error msg) (0) | 2024.05.09 |