-
에러 메시지 커스터마이징웹페이지 제작을 위한 스프링공부 2020. 5. 12. 13:47
에러 메시지
유효성 검사에서 오류가 있다고 판단되는 항목에 대해서 jsp에서 메시지를 출력 하였습니다
우리가 출력한 메시지는 JSR-303에서 정의한 메시지가 그대로 나오는 것이며 우리가 설정한 문자열은 아닙니다.
JSR-303 과 Hibernate에서 제공하는 어노테이션중 일부는 새로운 메시지를 셋팅 할 수 있고 일부를 셋팅하지 못합니다.
properties를 이용한 메시지 설정
유효성 검사를 통과하지 못하며 jsp에 오류 관련된 정보가 전달됩니다
이때 codes[0]으로 값을 가져오면 다음 양식으로 문자열을 가져올 수 있습니다
에러종류.빈이름.프로퍼티이름
우리가 properties 파일에 위와 같은 양식의 이름으로 메시지를 등록해주면 properties 파일에 작성한 문자열을 가져와 출력할 수 있고 다국어 처리까지 가능해집니다.
<%@ 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" %> <!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').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('data2').codes[0] }<br/> </c:if> </spring:hasBindErrors> <button type='submit'>확인</button> </form> </body> </html>
error내용에 codes를 넣어 에러가 발생한 에러종류.빈이름.프로퍼티이름를 출력해보았다
다음 에러 문자열을 jsp에서 받아내서 사용할 수 있기떄문에 이 이름으로 property값을 등록하고 그것을 message로 등록해주면 jsp에서 사용가능하다
Size.dataBean1.data1=data1은 2~10글자를 입력해야됩니다
Max.dataBean1.data2=data2는 100이하의 정수를 넣어햐 합니다이렇게 Size.dataBean1.data1, Max.dataBean1.data2=data2 두개의 문자열을 다음과 같이 정의해놓는다. 이렇게 함으로써 다음과 같은 문자열을 오른쪽의 값이 출력된다.
하지만 이방법은 입력한 데이터들을 다 새로고침을 함으로써 기존에 제대로 입력한 값들도 다 날라간다
이제 그 데이터들을 유지해보도록 하겠습니다
FORM태그를 활용함(spring mvc를 이용하여 사용자 입력값에 대한 유효성검사를 시행)
<%@ 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:form action="input_pro" modelAttribute="dataBean1" method="post"> data1:<form:input path="data1" type='text'/></br> <!-- dataBean1의 data1이라는 변수에 들어가있는 값을 여기 input태그의 value에 넣어줌 --> data2:<form:input path="data2" type='text'/></br> <!-- dataBean1의 data2이라는 변수에 들어가있는 값을 여기 input태그의 value에 넣어줌 --> <form:button type="submit">확인</form:button> </form:form> </body> </html>
다음과 같은 에러 발생 이유는
package kr.co.softcampus.controller; import javax.validation.Valid; 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 kr.co.softcampus.beans.DataBean1; @Controller public class TestController { @GetMapping("/input_data") public String input_data() { return "input_data"; } @PostMapping("/input_pro") public String input_pro(@Valid DataBean1 dataBean1, BindingResult result) { // 유효성 검사에서 위반된 부분이 있다면.. if(result.hasErrors()) { // 유효성 위반 결과들 모두 가져온다. return "input_data"; } return "input_success"; } }
input_data메소드에서 input_data를 반환하는데 input_data에는 dataBean1의 데이터가 들어가있지 않기때문에 값을 불러올 수 가없음.
package kr.co.softcampus.controller; import javax.validation.Valid; 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 kr.co.softcampus.beans.DataBean1; @Controller public class TestController { @GetMapping("/input_data") public String input_data(DataBean1 dataBean1) { return "input_data"; } @PostMapping("/input_pro") public String input_pro(@Valid DataBean1 dataBean1, BindingResult result) { // 유효성 검사에서 위반된 부분이 있다면.. if(result.hasErrors()) { // 유효성 위반 결과들 모두 가져온다. return "input_data"; } return "input_success"; } }
다음과 같이 수정후 결과 출력시 입력한 데이터값이 새로고침 현상후 삭제되지않고 계속 유지되는것을 볼 수 있음
'웹페이지 제작을 위한 스프링공부' 카테고리의 다른 글
JSR-308 (0) 2020.05.12 JSR-303 (0) 2020.05.12 유효성 검사 (0) 2020.05.10 message (0) 2020.05.09 properties (0) 2020.05.09