Spring/Spring MVC

Spring MVC - 에러 메시지 커스터마이징, From 데이터 유지하기

jddng 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
반응형