Validator
Spring에서는 Validator를 구현하기 위해 ValidatorUtils를 이용한 입력 필드의 값 존재 여부의 validation 체크나
errors 객체를 통해 property파일 메시지를 출력해주는 validation 체크 방법을 지원한다.
이것은 jsp 페이지 에서form:errors를 태그를 통해 간단히 에러 메시지를 출력할 수 있으며 SimpleFormController를 사용하면
입력페이지에 에러 메시지를 출력해 줄 수 있다.
Validator 생성
ValidatorUtils 사용
Validator를 생성할 때 required 속성값의 validation을 체크하고 에러메시지를 프로퍼티 파일 없이 사용자가 지정해준 메시지로 출력 할 수 있도록 지원한다.
간단히 ValidatorUtils를 사용하여 구현할 수 있다.
구현 예는 다음과 같다.
public class UserValidator implements Validator {
public boolean supports(Class clazz) {
return HelloVO.class.isAssignableFrom(clazz);
}
public void validate(Object object, Errors errors) {
//ValidationUtils 이용 부분
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "email", "required",
new Object[] { "email" }, "Enter your email");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password",
"required", new Object[] { "password" }, "Enter your password");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "confirmPassword",
"required", new Object[] { "confirmPassword" },
"Enter your password one more");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "required",
new Object[] { "userName" }, "Enter your name");
}
}
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를 컨트롤러에도 추가해 주어야 한다. 추가 방법은 다음과 같다.
public class HelloworldTestController extends SimpleFormController {
...중략...
public HelloworldTestController() {
setCommandName("user");
setCommandClass(HelloVO.class);
setFormView("test");
setSuccessView("success");
setValidator(new UserValidator());
}
...중략...
}
form:errors 태그 사용
validatior에서 얻어진 메시지를 JSP페이지에서 쉽게 출력할 수 있도록 spring에서 제공하는 태그 라이브러리 중 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를 통해 컨트롤러 내에서 지정해 줄 수도 있다. 자세한 방법은 본매뉴얼Controller-SimpleFormController부분을 참고한다.
form 태그는 여러가지 폼 입력 태그들을 갖는다. 각 타입에 따라 text타입은 <form:input> 기타 나머지 타입은 <form:password>와 같은 형태로 나타난다.
기타 폼 태그의 자세한 사항은 본 매뉴얼 Spring's Form Tag를 참고한다.
이러한 입력 폼 태그는 path라는 속성에 이름을 지정해주는데 이는 반드시 도메인 객체의 빈 이름과 같아야 한다.
또한 form태그에는 웹단에서 validator에서 발생시킨 에러 메시지를 출력해주는 <form:errors>태그를 갖고 이 태그 역시 path값을 지정해 줘야한다.
path값에 "*" 값을 주게 되면 모든 error메시지를 출력한다.
사용 예는 다음과 같다.
<% request.setAttribute("user",new sample.services.HelloVO())%>
<form:form commandName="user"><br/>
<table border="1">
<tr>
<td>name :</td>
<td> <form:input path="userName"/></td>
</tr>
<tr><td colspan="2">
<form:errors path="userName" /></td></tr>
<tr>
<td>password : </td>
<td><form:password path="password"/></td>
</tr>
<tr><td colspan="2">
<form:errors path="password" /></td></tr>
<tr>
<td>confirm password : </td>
<td><form:password path="confirmPassword"/></td>
</tr>
<tr><td colspan="2">
<form:errors path="confirmPassword" /></td></tr>
<tr>
<td>email : </td>
<td><form:input path="email"/></td>
</tr>
<tr><td colspan="2">
<form:errors path="email" /></td></tr>
<input type="submit" value="submit"/>
</form:form>
Resources
다운로드
Spring MVC Sample Application을 포함하고 있는
anyframe-sample-springmvc.zip 파일을 Spring MVC - Sample 다운로드 페이지에서 다운받은 후
위 코드를 확인해 볼 수 있으며 위 내용이 포함된 Spring MVC Sample Application을 실행시킬 수 있다.
참고자료