ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - 에러 메시지 커스터마이징, From 데이터 유지하기
    Spring/Spring MVC 2022. 1. 3. 12:22
    728x90
    반응형

    에러 메시지 커스터마이징

    • JSR-303에서 정의한 메시지 대신, 직접 에러 메시지를 정의하여 출력
    • 위반 코드를 이용하여 Propertie에 저장한 데이터를 이용할 수 있다.

     

     이제 Java로 하는 방법과 XML로 하는 방법을 알아보자.


     

    방법 1 - Java

     

    작성한 JSP에서 에러 메시지 출력

     

     DataBean.java

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    
    <%--<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>--%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<h1>input_data</h1>
    
    	<form action="input_pro" method="post">
    		data1 : <input type='text' name='data1'/><br/>
    		<spring:hasBindErrors name="dataBean1">
    			<c:if test="${errors.hasFieldErrors('data1') }">
    				${errors.getFieldError('data1').defaultMessage }<br/>
    				${errors.getFieldError('data1').codes[0] }<br/>
    			</c:if>
    		</spring:hasBindErrors>
    		
    		data2 : <input type='text' name='data2'/><br/>
    		<spring:hasBindErrors name="dataBean1">
    			<c:if test="${errors.hasFieldErrors('data2') }">
    				${errors.getFieldError('data1').defaultMessage }<br/>
    				${errors.getFieldError('data1').codes[0] }<br/>
    			</c:if>
    		</spring:hasBindErrors>
    		<button type="submit">확인</button>
    	</form>
    </body>
    </html>

    결과 화면

     

    ${errors.getFieldError('data1').defaultMessage }
     - JSR-303에 정의된 default Message 출력

    ${errors.getFieldError('data1').codes[0] }
     - 위반된 Code 출력
     - codes 배열의 인덱스별 값을 보고 싶으면
       Spring MVC - 유효성 검사 (JSR-303) :: 울타리 (tistory.com) 참고

    Spring MVC - 유효성 검사 (JSR-303) :: 울타리 (tistory.com)

     

    Spring MVC - 유효성 검사 (JSR-303)

    유효성 검사 (JSR-303) 서버에서 사용자 입력에 대해 유효성 검사를 할 수 있다. JavaScript로 처리할 수도 있지만 Spring MVC에서도 유효성을 처리할 수 있다. JSR - 303 라이브러리 사용 Bean에 데이터가 입

    jddng.tistory.com

     


     

     

    properties 파일을 이용하여 사용자 정의 에러 메시지 출력

     위 JSP에서 codes 배열을 이용해 위반 정보를 알 수 있었다. 이 위반 정보를 이용해 각 위반에 따른

    사용자 정의 에러 메시지를 출력 할 수 있다.

     

     우선 출력할 에러 메시지를 properties 파일에 작성

     

    error_message.properties            (/WEB-INF/properties/)

    Size.dataBean1.data1 = data1은 2 ~ 10글자를 입력해야 합니다.
    Max.dataBean1.data2 = data2는 100 이하의 정수를 넣어야 합니다.

     

    작성한 properties 파일을 Message로 등록

     아래 링크를 참고하길 바란다.

     

     이제 JSP에서 properties 파일에 있는 데이터를 이용할 수 있다.

     

     

    사용자 정의 에러 메시지 출력

     properties 파일에 각 위반에 따른 사용자 정의 에러 메시지를 저장했으므로 위반이 발생하면

    위반 코드를 이용해 사용자 정의 에러 메시지 데이터를 가져와 출력할 수 있다.

     

    JSP

    	<form action="input_pro" method="post">
    		data1 : <input type='text' name='data1'/><br/>
    		<spring:hasBindErrors name="dataBean1">
    			<c:if test="${errors.hasFieldErrors('data1') }">
    				<spring:message code="${errors.getFieldError('data1').codes[0] }"></spring:message><br/>
    			</c:if>
    		</spring:hasBindErrors>
    		
    		data2 : <input type='text' name='data2'/><br/>
    		<spring:hasBindErrors name="dataBean1">
    			<c:if test="${errors.hasFieldErrors('data2') }">
    				<spring:message code="${errors.getFieldError('data2').codes[0] }"></spring:message><br/>
    			</c:if>
    		</spring:hasBindErrors>
    		<button type="submit">확인</button>
    	</form>

    결과 화면

     

    <spring:message code="${errors.getFieldError('data1').codes[0] }"></spring:message><br/>
     - errors.getFieldError('data1').codes[0] -> Size.dataBean1.data1 
     - Message에서 errors.getFieldError('data1').codes[0]를 key값으로 value값을 가져온다.
     - key = Size.dataBean1.data1,  value = data1은 2 ~ 10글자를 입력해야 합니다.

     

     위와 같이 개발자가 properties 파일에 해당 오류 코드에 대한 문자열을 저장해 놓고 JSP에서 해당 오류 코드로 Mesaage에서 해당 문자열을 가져올 수 있다.

     


     

    Form 데이터 유지하기

    • 유효성 검증에 통과하지 못해 다시 입력 화면으로 돌아와 기존에 입력했던 내용을 유지해야 할 경우
    • 화면으로 전달된 Bean 객체를 input 태그에 값을 주입하면 된다.

    Form 커스텀 태그 사용하여 From 데이터를 유지할 수 있다. Form커스텀 태그는 아래 링크 참고하길 바란다.

     

     

     JSP

    <%-- 
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
    --%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    
    	 <form:form action="input_pro" modelAttribute="dataBean1" acceptCharset="UTF-8">
    	 	data 1 : <form:input path="data1" type="text"/><br/>
    	 		 <form:errors path="data1"/><br/>
    	 	data 1 : <form:input path="data2" type="text"/><br/>
    	 		 <form:errors path="data2"/><br/>
    	 		 <form:button type="submit">확인</form:button>
    	 </form:form>

     만약 오류 페이지가 나온다면 위 JSP 파일에 dataBean1을 전달하지 못해서 그런 경우이니

    JSP를 처리하는 Controller에 Mapping된 메서드에 해당 Bean을 주입해주면 된다.

     

    Controller

    	@GetMapping("/input_data")
    	public String input_data(DataBean1 dataBean1) {
    		
    		return "input_data";
    	}
    728x90
    반응형

    댓글

Designed by Tistory.