반응형

참고 및 출처: 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

 

기타: http://forum.springsource.org/showthread.php?100397-The-prefix-mvc-for-element-mvc-annotation-driven-is-notbound

 

 

스프링에서 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에 그에해당하는 메시지가 출력된다.

 

 

 

반응형

+ Recent posts