티스토리 뷰

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>
......

 

 

댓글