먼저 이전에 작성한 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 사용 하는 방법
@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 리소스 적용 하기
보면서 알아낸 방법 입니다.매우 중요한 부분이니
잘 이해하시기 바랍니다.
먼저 아래와 같이 메세지 번들을 설정 합니다.
<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 작성 방법에
대해서 말씀을 드리겠습니다.
댓글 없음:
댓글 쓰기