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
|
참고자료