Validator

Spring MVC에서는 Validator를 구현하기 위해 ValidatorUtils를 이용한 입력 필드의 값 존재 여부의 validation 체크나 errors 객체를 통해 property파일 메시지를 출력해주는 validation 체크 방법을 지원한다. 이것은 jsp 페이지 에서form:errors를 태그를 통해 간단히 에러 메시지를 출력할 수 있으며 SimpleFormController를 사용하면 입력페이지에 에러 메시지를 출력해 줄 수 있다.

Validator 생성

  • ValidatorUtils 사용
  • Validator를 생성할 때 required 속성값의 validation을 체크하고 에러메시지를 프로퍼티 파일 없이 사용자가 지정해준 메시지로 출력 할 수 있도록 지원한다. 간단히 ValidatorUtils를 사용하여 구현할 수 있다. 다음은 validator를 구현한 UserValidator.java 의 일부이다.
    public class UserValidator implements Validator {
    
    	public boolean supports(Class clazz) {
    		return UserVO.class.isAssignableFrom(clazz);
    	}
    
    	public void validate(Object object, Errors errors) {
    
    		// validationUtils를 이용하여 입력값이 비었는지 체크
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName",
    				"required", new Object[] { "userName" }, "Enter your name");
    		ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password",
    				"required", new Object[] { "password" }, "Enter your password");
    ValidationUtils 클래스에 대한 API 는 여기를 참고한다.
  • Property 파일 사용
  • validation을 체크할 때 errors 인터페이스를 사용하여 properties 파일을 참조하여 에러 메시지를 출력할 수 있는데 그 예는 다음과 같다.
    public class UserValidator implements Validator {
    	public boolean supports(Class clazz) {
    		return HelloVO.class.isAssignableFrom(clazz);
    	}
    
    	public void validate(Object object, Errors errors) {
    		
    		HelloVO helloVO = (HelloVO) object;
    		if (helloVO.getPassword().length() < 6)
    			errors.rejectValue("password", "error.password.tooshort");
    
    		if (!helloVO.getPassword().equals(helloVO.getConfirmPassword()))
    			errors.rejectValue("confirmPassword", "error.confirm");
    	}
    }
    해당 조건에 만족하지 않는 입력 값이 있으면 properties파일에 미리 정의된 error.password.tooshort, error.confirm등의 메시지가 출력될 것이다. messageSource 정의 방법은Spring MVC 다국어 지원 기능 을 참고하고 errors 클래스의 API는 여기 를 참고한다.

    Validator 등록

    위에서 처럼 생성한 validator를 컨트롤러에도 추가해 주어야 한다. 다음은 UserController 빈 정의가 작성되어 있는 user-servlet.xml 파일의 일부이다.
    <bean name="/getUser.do"
    	class="anyframe.sample.springmvc.web.controller.basic.UserController">
    	<property name="userService" ref="userService" />
    	<property name="validator" ref="userValidator"/>
    </bean>
    <bean name="userValidator" class="anyframe.sample.springmvc.web.validator.UserValidator"/>
    이는 해당 Controller 클래스 내의 생성자 안에서 setValidator를 사용해 정의해줄 수도 있다.

    form:errors 태그 사용

    validatior에서 얻어진 메시지를 JSP페이지에서 쉽게 출력할 수 있도록 Spring MVC에서 제공하는 태그 라이브러리 중 form 태그의 form:errors태그를 사용할 수 있다. 이 태그를 사용하기 위해서는 다음과 같은 절차를 따른다.
    • 태그 라이브러리 등록

    • spring의 form 태그 라이브러리를 사용하기 위해서는 spring-form.tld파일이 필요하고 이는 spring-webmvc-2.5.2.jar 파일에 포함되어 있다. 이 폼 태그를 사용하기 위해서는 JSP 페이지에 taglib을 추가해줘야한다.
      <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
    • form:form 태그 사용

    • 일단 form 태그를 사용하려면 commandName 속성을 지정해야 하는데 이 속성은 폼 이름과 트랜스퍼 오브젝트의 빈들과 1:1로 매핑시켜준다. commandName의 속성값을 지정해 주지 않을 경우 기본값은 command이고 이값은 request로 셋팅해 줘야 한다. 이값은 SimpleFormController를 사용할 경우 컨트롤러의 fomBackingObject를 통해 컨트롤러 내에서 지정해 줄 수도 있다. 자세한 방법은 본 매뉴얼 >> Spring MVC >> Basic >> Controller >> SimpleFormController 부분을 참고한다. form 태그는 여러가지 폼 입력 태그들을 갖는다. 각 타입에 따라 text타입은 <form:input> 기타 나머지 타입은 <form:password>와 같은 형태로 나타난다. 기타 폼 태그의 자세한 사항은 본 매뉴얼 >> Spring MVC >> Basic >> View >> Tag Library 를 참고한다. 이러한 입력 폼 태그는 path라는 속성에 이름을 지정해주는데 이는 반드시 트랜스퍼 오브젝트의 빈 이름과 같아야 한다. 또한 form태그에는 웹단에서 validator에서 발생시킨 에러 메시지를 출력해주는 <form:errors>태그를 갖고 이 태그 역시 path값을 지정해 줘야한다. path값에 "*" 값을 주게 되면 모든 error메시지를 출력한다. 다음은 form:errors 태그가 정의되어 있는 getUser.jsp 파일의 일부이다.
      <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
      <tr>
      	<td> Name :</td>
      	<td><form:input path="userName" />(required)</td>
      	<td><form:errors path="userName" /></td>
      </tr>
      <tr>
      	<td>password :</td>
      	<td><form:password path="password" />(required, 6자이상입력)</td>
      	<td><form:errors path="password" /></td>
      </tr>

    Resources

    • 다운로드
    • 이클립스 프로젝트 형태의 샘플 웹 어플리케이션을 포함하고 있는 anyframe-springmvc-sample-basic.zip 파일을 다운받은 후, 테스트 환경 설정 을 참조하여 위에서 제시한 예제 코드를 실행해 볼 수 있다.
      Name
      Download
      anyframe-springmvc-sample-basic.zip
      Download

    • 참고자료