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

+ Recent posts