728x90

유효성 검사 후 에러메세지 출력

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href='t1'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
       return "test1";
    }

    //폼에 작성을 한 후 경로 매핑
    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data1, BindingResult result) {
    						//@Valid (@ModelAttribute) Data data1...<< 생략되어있음!!
       //@Valid : 메소드에 주입받는 빈에 유혀성 검사를 실시하겠다라는 선언!!
       //BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
       
       System.out.println(data1.getNum1());
       System.out.println(data1.getNum2());
       System.out.println(result);

       return "test1";
    }
}

 

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--적은 값이 Data클래스의 어노테이션 조건에 맞아야함 @size, @max--%>
<form action="test1_proc" method="post">
    num1 : <input type="text" name="num1"><br>

    num2 : <input type="text" name="num2"><br>
    <button type="submit">확인</button>

</form>
</body>
</html>

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href='t1'>test1</a>
</body>
</html>

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%--적은 값이 Data클래스의 어노테이션 조건에 맞아야함 @size, @max--%>
<form action="test1_proc" method="post">
    num1 : <input type="text" name="num1"><br>

    num2 : <input type="text" name="num2"><br>
    <button type="submit">확인</button>

</form>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
       return "test1";
    }

    //폼에 작성을 한 후 경로 매핑
    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data1, BindingResult result) {
       //@Valid : 메소드에 주입받는 빈에 유혀성 검사를 실시하겠다라는 선언!!
       //BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
       System.out.println(data1.getNum1());
       System.out.println(data1.getNum2());
       System.out.println(result);

       if(result.hasErrors()) {
          for(ObjectError obj : result.getAllErrors()){
             System.out.println("코드: " + obj.getCode()); // 에러코드 확인
             System.out.println("이름 :" + obj.getObjectName());
             System.out.println("메세지 :" + obj.getDefaultMessage());

             String [] str = obj.getCodes();
             for(String s:str) {
                System.out.println(s);
             }
             if(str[0].equals("Size.data.num2")){
                System.out.println("num2 글자수 잘못되었음! 재작성 하세요!");
             }
             else if(str[0].equals("Max.data.num1")){
                System.out.println("num1값 최대100이야~ 다시쓰렴~");
             }
          }
          return "test1"; //유효성 검사에 위배되면 다시 form 형태로 감
       }

       return "test2"; // 유효성 검사에 맞으면 test2.jsp로 가서 입력한 값을 띄움
    }
}

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${data.num1}
${requestScope.data.num2}
</body>
</html>

 

 

만약 잘못된 타입을 입력하거나, 입력값이 지정된 범위의 값이 아니면 에러문이 출력됨

입력값 타입이 안맞는 경우
해당 조건에 부합하지 않은경우


 

 

Error 메세지 웹으로 출력

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href='t1'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import javax.validation.Valid;


@Controller
public class SpringController {

    @GetMapping("/t1")
    public String t1() {
       return "test1";
    }

    //폼에 작성을 한 후 경로 매핑
    @PostMapping("/test1_proc")
    public String test1_proc(@Valid Data data1, BindingResult result) {
       //@Valid : 메소드에 주입받는 빈에 유효성 검사를 실시하겠다라는 선언!!
       //BindingResult : 유효성 검사를 실행한 결과정보가가 저장되어 있음 -> jsp 파일
       System.out.println(data1.getNum1());
       System.out.println(data1.getNum2());
       System.out.println(result);

       if(result.hasErrors()) {
          for(ObjectError obj : result.getAllErrors()){
             System.out.println("코드: " + obj.getCode()); // 에러코드 확인
             System.out.println("이름 :" + obj.getObjectName());
             System.out.println("메세지 :" + obj.getDefaultMessage());

             String [] str = obj.getCodes();
             for(String s:str) {
                System.out.println(s);
             }
             if(str[0].equals("Size.data.num2")){
                System.out.println("num2 글자수 잘못되었음! 재작성 하세요!");
             }
             else if(str[0].equals("Max.data.num1")){
                System.out.println("num1값 최대100이야~ 다시쓰렴~");
             }
          }
          return "test1"; //유효성 검사에 위배되면 다시 form 형태로 감
       }

       return "test2"; // 유효성 검사에 맞으면 test2.jsp로 가서 입력한 값을 띄움
    }
}

 


Error 메세지 Properties로 지정하여 출력

유효성 검사 실패한 경우

index

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <a href='t1'>test1</a>
</body>
</html>

controller

package kr.bit.controller;

import kr.bit.beans.Data;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
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("/test1_proc")
    public String test1_proc(@Valid Data data, BindingResult result) {
       if(result.hasErrors()) {
          return "test1"; //error 메세지 출력 -> 유효성검사에 위배되었으므로
       }
       return "test2"; // 입력한 값 띄움 -> 유효성검사 통과
    }

}

test1.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<body>
<form:form action="test1_proc" modelAttribute="data" method="post">
    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>

    <button type="submit">확인</button>
</form:form>
</body>
</html>

ServeletAppContext

package kr.bit.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
@EnableWebMvc
@ComponentScan("kr.bit.controller")
public class ServletAppContext implements WebMvcConfigurer {

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
       WebMvcConfigurer.super.configureViewResolvers(registry);
       registry.jsp("/WEB-INF/views/", ".jsp");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
       WebMvcConfigurer.super.addResourceHandlers(registry);
       registry.addResourceHandler("/**").addResourceLocations("/resources/");
    }

    @Bean(name = "messageSource")
    public ReloadableResourceBundleMessageSource messageSource() {
       ReloadableResourceBundleMessageSource res = new ReloadableResourceBundleMessageSource();
       res.setBasename("/WEB-INF/properties/error");
       return res;
    }

}

 

properties

Max.data.num1= Value of num1 have not to over 100
Size.data.num2= Value of num2 have to between 4 and 10
# 에러종류, 빈이름, 프로퍼티명
# 어노테이션명.클래스명(맨앞 소문자).필드명

 

 


유효성검사 성공한 경우

test2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
${data.num1}
${requestScope.data.num2}
</body>
</html>

 

728x90

+ Recent posts