-
Spring MVC - 에러 메시지 커스터마이징, From 데이터 유지하기Spring/Spring MVC 2022. 1. 3. 12:22728x90반응형
에러 메시지 커스터마이징
- 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)
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반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - JSR-380 어노테이션(Annotation) (0) 2022.01.03 Spring MVC - JSR-303 어노테이션(Annotation) (0) 2022.01.03 Spring MVC - 유효성 검사 (JSR-303) (0) 2022.01.03 Spring MVC - Message (0) 2022.01.02 Spring MVC - Properties (0) 2021.12.30