2010년 4월 4일 일요일

Spring 3.0 Validation Part2

"Spring 3.0 Validation Part1"에 이어서 설명 드리도록 하겠습니다.
먼저 이전에 작성한 User 도메인 클래스 입니다.
package org.springshowcase.mvc;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import org.hibernate.validation.constraints.NotEmpty;


public class User {

@NotEmpty()
@Size(min=1,max = 5)
@Pattern(regexp="[0-9a-zA-Z]")
private String id;

@NotEmpty()
private String name;

@NotEmail
private String email;

private Integer age;

...setter & getter method
}


  • Controller에서 Validation 사용 하는 방법
Controller 에서 사용 하는 방법은 의외로 간단 합니다.
@RequestMapping(method = RequestMethod.POST)
public ModelAndView processSubmit(@Valid @ModelAttribute("user") User user,
BindingResult result, SessionStatus status) {
ModelAndView mav = new ModelAndView();
if (result.hasErrors()) {
System.out.println(".....invalid");
}
return mav;
}

위의 소스를 보면 검증을 위해서 파라미터 부분에
"@Valid" 어노테이션을 설정하면 끝입니다.
즉 저말은 User 도메인에 검증 로직을 실행 하라
는 뜻입니다. 이미 검증이 끝났기 때문에
"result.hasErrors"를 통해서 validation
분기 로직을 적절하게 작성 하면 됩니다.

  • JSP 설정 방법
<form:input path="id" /> <br />
<font color="yellow"><form:errors path="id" /></font><br />
<label for="contact_email">Enter user name: </label> <br />
<form:input path="name" /><br />
<font color="yellow"><form:errors path="name" /></font><br />
<label for="contact_email">Enter email: </label> <br />
<form:input path="email" /><br />
<font color="yellow"><form:errors path="email" /></font><br />
<label for="contact_subject">Enter Age: </label> <br />
<form:input path="age" /> <br /><br />
<input type="button" value="Save Changes" onclick="doSave();" class="button" />
</form:form>

JSP 소스는 이전 버전과 동일 하게 위와 같이 코드를
작성 합니다.

  • Invalid시 Message 리소스 적용 하기
이 부분은 SpringSource 팀 블러그와 JSR-303 스펙을
보면서 알아낸 방법 입니다.매우 중요한 부분이니
잘 이해하시기 바랍니다.

먼저 아래와 같이 메세지 번들을 설정 합니다.
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basenames">
<list>
<value>messages.default</value>
</list>
</property>
</bean>


default_ko.properties
메세지 expression은 "검증 annotation명+도메인명+속성명"
으로 하며 key 작성 규칙은 java method 형식으로
합니다.
NotEmpty.user.id=아이디를 입력 하세요.
Size.user.id=아이디는 5자 이하 입니다.
Pattern.user.id=아이디는 반드시 영문 또는 숫자만 입력 가능 합니다.
NotEmpty.user.name=이름을 입력 하세요.
NotEmail.user.email=이메일 형식이 틀립니다.
public class User {

@NotEmpty()
@Size(min=1,max = 5)
@Pattern(regexp="[0-9a-zA-Z]")
private String id;

.....
}

예를 들어서 "@NotEmpty"의 경우 메세지 키는
NotEmpty(annotation 명) + "." + user(도메인 클래스명)
+"." + id(속성명) 그래서 전체 메세지 키는
"NotEmpty.user.id"가 되는 것입니다.

Part3에서는 Custom Validation 작성 방법에
대해서 말씀을 드리겠습니다.

댓글 없음:

댓글 쓰기