카테고리 없음
Spring MVC 5-6 유효성 체크
chelss25
2022. 8. 15. 15:42
Spring MVC 5-6 유효성 체크
Spring MVC 유효성 체크
서버측 유효성 체크 기능
Validator와 Error 인터페이스 지원
Validator : Command 객체의 유효성을 검증할 때 사용
BoardValidator.java |
public class BoardValidator implements Validator { public boolean supports(Class<?> clazz) { return BoardVO.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { BoardVO board = (BoardVO)target; if(board.getTitle() == null || board.getTitle().trim().isEmpty()){ errors.rejectValue("title", "required"); } if(board.getWriter() == null || board.getWriter().trim().isEmpty()){ errors.rejectValue("writer", "required"); } if(board.getContent() == null || board.getContent().length() <= 10){ errors.rejectValue("content", "board.content"); } } } |
ValidationUtils 활용
Errors 인터페이스 이용보다 보다 쉽게 처리 가능
BoardValidator.java |
public class BoardValidator implements Validator { public boolean supports(Class<?> clazz) { return BoardVO.class.isAssignableFrom(clazz); } public void validate(Object target, Errors errors) { BoardVO boardCommand = (BoardVO)target; ValidationUtils.rejectIfEmptyOrWhitespace(errors, "title", "required"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "writer", "required"); if(boardCommand.getContent().length() <= 10){ errors.rejectValue("content", "board.content"); } } } |
validator 적용하기
Controller 클래스 내의 메서드에 BindingResult 타입의 파라미터가 추가되어야 함.
AddBoardController.java |
@Controller @RequestMapping("/addBoard.do") public class AddBoardController { @RequestMapping(method=RequestMethod.POST) public String addBoard(@ModelAttribute("board") BoardVO vo, BindingResult rs){ new BoardValidator().validate(vo, result); if(rs.hasErrors()){ return "addBoard.jsp"; } boardService.addBoard(board); return "redirect:getBoardList.do"; } } |
에러 메시지 처리
에러메시지 문자열은 resource에 작성하고 Spring 설정 정보에 messageSource Bean을 등록한다.
applicationContext.xml |
<beans ...> <bean id="errorMessageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>message.messageSource</value> </list> </property> </bean> </beans> |
에러 메시지 처리 – 이어서
에러메시지 형식
message=로그인
message.user.id=아이디
message.user.password=비밀번호
user.id=아이디는 필수 입력항목입니다.
user.password=비밀번호는 필수 입력항목입니다.
board.title=제목은 필수 입력항목입니다.
board.writer=작성자는 필수 입력항목입니다.
board.content=내용은 10글자 이상 작성해주세요.
에러메시지는 다국어 처리할 수 있음
에러 메시지 처리 – 이어서
<form:errors /> 커스텀 태그를 이용해 에러 메시지 출력
addBoard.jsp |
<%@page contentType="text/html; charset=EUC-KR"%> <%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %> <%@taglib prefix="spring" uri="http://www.springframework.org/tags" %> ...... <spring:hasBindErrors name="board"/> ...... <tr> <td>제목</td><td><input type="text" name="title"/> <form:errors path="board.title"/></td> </tr> <tr> <td>작성자</td><td><input type="text" name="writer" size="10"/> <form:errors path="board.writer"/></td> </tr> <tr> <td>내용</td><td><textarea name="content" cols="40" rows="10"></textarea> <form:errors path="board.content"/></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="새글 등록"/></td> </tr> ...... |