참고 및 출처: http://static.springsource.org/spring/previews/validation.html
http://beyondj2ee.tumblr.com/post/14509015383/spring-3-0-validation-part1
http://www.egovframe.org/wiki/doku.php?id=egovframework:rte:ptl:validation
http://www.roseindia.net/tutorial/spring/spring3/web/spring-3-mvc-validation-example.html
http://gyumee.egloos.com/3056225
스프링에서 validation사용하기
스프링에서 validation을 사용하는 경우는 값을 저장하는 경우 그값의 필수체크, 길이체크, 패턴체크를 하기위해서 사용하는 것 같다. 물론 이같은 경우는 내가 사용하기 위해서 한 것이다.
1.
maven을 사용한다면 maven의 pom.xml을 이용하여 validation관련 jar파일을 dependency에 추가해준다.
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>4.2.0.Final</version>
</dependency>
2.
그리고WebContent/WEB-INF에 위치한 dispatcher-servlet.xml파일을 열어서
<!-- Invokes Spring MVC @Controller methods -->
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="webBindingInitializer">
<!-- Configures Spring MVC DataBinder instances -->
<bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="validator" ref="validator" />
</bean>
</property>
</bean>
<!-- Creates the JSR-303 Validator -->
<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" />
를 추가해준다.
사실 다른 곳에서는 <mvc:annotation-driven /> 한줄을 추가해 주면 된다고 하지만 그럴경우
안되는 항목들이 있어 위와같이 하였다.
3. Controller단에서는
public String saveUserInfo(@Valid @ModelAttribute("personVo") PersonVO personVO
,BindingResult bindingResult, Model model
,SessionStatus status) {
~~~~~~~~~~~
}
@Valid를 써줘서 saveUserInfo 함수의 파라미터 personVO의 validation을 체크하겠다는 것을 기술한다.
4.
그다음 기존 아래와 같은 vo에서
public class PersonVO {
private String asgmtNm;
private int age;
}
validation체크할 것에 대한 정보를 입력한다.
public class PersonVO {
@NotNull
@Max(64)
private String asgmtNm;
@Min(0)
private int age;
}
여기서 asgmtNm은 널값이면 안되고, 최대 64바이트/ age인 경우 0보다 무조건 커야된다는 조건을 입력하였다.
사실 @NotNull(message="")를 사용하여 notnull인 경우 출력될 메시지를 직접 입력해줘도 되고,
WebContent/WEB-INF에 messages.properties파일을 만들어서 사용해도 된다.
messgaes.properties파일에서 메시지를 기술하는 방법은 아래와 같다.
NotEmpty.person.asgmtNm=
asgmtNm must not be blank.
(validation규칙.폼이름.폼에서항목 = 메시지)
5. 화면단에서는
<form:form commandName="personVO" name="person" id="person" method="post">
<form:input id="asgmtNm" path="asgmtNm" /><form:errors path="asgmtNm"/>
</form:form>
form:form을 사용해서 vo와 input항목을 매핑해 주도록 한다.
결과) 그렇게 해주고 나면 나중에 @NotNull, @Max(64)에 해당하는 항목이 나오면
form:errors에 그에해당하는 메시지가 출력된다.