ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • struts1 :: Validator 사용하기
    IT/Java & JSP & FW 2012. 4. 25. 19:45

    ActionForm에 저장된 값의 유효성을 검사할 때 validate() 메소드를 사용하였는데, 이렇게 할 경우 두 종류 이상의 ActionForm이 동일한 규칙을 가진 프라퍼티를 가지고 있을 때도 각각의 validate()에 동일한 유효성 검증 코드를 넣어야 하는 문제가 있고, 유효성 검증 규칙이 바뀔때마다 validate()의 코드를 수정해서 재컴파일 해야 한다는 문제가 있다.

    그래서 스트럿츠 Validator(유효성검사기) Framework이 나왔다. Validator 프레임워크는 설정 XML 파일을 이용해서 각 ActionForm 프라퍼티들의 유효성을 검사할 수 있게 해준다. ActionForm에 validate()를 만들 필요가 없다.

    Validator는 두 개의 설정 파일을 가진다.


    valdator-rules.xml : 검증 규칙을 선언한다. 예를들면 “주민등록번호는 xxxxxx-1xxxxxx 혹은 xxxxxx-2xxxxxx 처럼 앞에 6자리 뒤에 1혹은 2로 시작하는 7자리 숫자로 구성된다” 라는 식의 규칙만을 저장하고 있는 것이다. 여기서 선언된 규칙을 여러 ActionForm을 검증하는데 사용할 수 있게 된다.

    validation.xml : 각 ActionForm의 어떤 프라퍼티가 validator-rules.xml에 설정된 어떤 규칙을 만족해야 하는지를 설정한다. 예를들면 “UserInfoForm의 juminbunho 프라퍼티는 validator-rules.xml의 ‘juminbunho’ 규칙을 지켜야한다.”는 식의 설정을 하게 된다.


    validator-rules.xml

    <validator> 요소를 통해서 규칙을 선언할 수 있다. 여기서는 새로운 검증 규칙을 어떻게 선언하는지는 설명하지 않는다.

    기본적으로 알아야 할 것은 <validator name=”” msg=””/> 에서 name과 msg 속성이다.

    name 속성 : 검증 규칙의 이름. validation.xml 에서 이 이름을 통해 액션 폼의 프라퍼티에 적용할 규칙을 지정한다.

    msg 속성 : struts-config.xml 에서 지정한 리소스 번들 .properties 파일에서 가져올 오류 메시지의 키를 지정한다. ActionForm.validate()에서 오류 메시지를 ActionErrors에 담아서 리턴하듯이 Validator는 리소스 번들 프라퍼티 파일에 있는 메시지를 ActionMessages에 담아서 리턴한다.

    스트럿츠 Validation의 기본 예제 validator-rules.xml 파일을 보면 이미 사용가능한 유용한 검증 규칙들이 선언되어 있다. 그것들만 사용해도 별 문제 없다. (required, minlength, maxlength, ....) 또한 기본 검증 규칙들을 위한 리소스 번들 메시지를 자신의 리소스 번들 프라퍼티 파일에 추가할 필요가 있는데, 기본적으로는 영문 메시지가 validator-rules.xml에 예제로 들어 있다. 그걸 번역한게 아래이다.

    # Struts Validator Error Messages

    errors.required={0}(이)가 필요합니다.

    errors.minlength={0}(은)는 최소한 {1} 문자 이상이어야 합니다.

    errors.maxlength={0}(은)는 최대 {1} 문자 이하이어야 합니다.

    errors.invalid={0}(이)가 유효하지 않습니다.

    errors.byte={0}(은)는 byte 형이어야 합니다.

    errors.short={0}(은)는 short 형이어야 합니다.

    errors.integer={0}(은)는 integer 형이어야 합니다.

    errors.long={0}(은)는 long 형이어야 합니다.

    errors.float={0}(은)는 float 형이어야 합니다.

    errors.double={0}(은)는 double 형이어야 합니다.

    errors.date={0}(은)는 날짜형이 아닙니다.

    errors.range={0}(은)는 {1}에서 {2} 사이 값이어야 합니다.

    errors.creditcard={0}(은)는 유효하지 않은 신용카드 번호입니다.

    errors.email={0}(은)는 유효하지 않은 이메일 주소입니다.


    validation.xml

    <?xml version="1.0" encoding="ISO-8859-1" ?>
    
    <!DOCTYPE form-validation PUBLIC
              "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
              "http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
    
    <form-validation>
    
    <!--
         This is a minimal Validator form file with a couple of examples.
    -->
    
        <global>
    
            <constant>
                <constant-name>postalCode</constant-name>
                <constant-value>^\d{3}-\d{3}$</constant-value>
            </constant>
    
    
        </global>
    
        <formset>
        
    		<form name="userInfoForm">
    		
    			<field property="name" depends="required">
    				<arg key="userInfoForm.username" />
    			</field>
    			
    			<field property="address" depends="required">
    				<arg key="userInfoForm.address" />
    			</field>
    			
    			<field property="postcode" depends="required, mask">
    				<msg name="mask" key="userInfoForm.postcodeError" />
    				<arg key="userInfoForm.postcode" />
    				<var>
    					<var-name>mask</var-name>
    					<var-value>${postalCode}</var-value>
    				</var>
    			</field>
    			
    			<field property="email" depends="required, email">
    				<arg key="userInfoForm.email" />
    			</field>
    			
    		</form>
        </formset>
     
    </form-validation>
    


    설명

    위는 이번 예제에서 사용할 validation.xml 파일이다. 이 파일을 /WEB-INF/config 디렉토리에 작성하여 저장한다.


    • <global><constant/></global>에서 constant 는 반복적으로 사용되는 문자열을 상수로 선언하는 것이다. 여기서는 postalCode 라는 이름으로 상수를 만들고 정규표현식 문자열을 값으로 지정하였다. 이것을 <form> 부분에서 ${postalCode} 라는 식으로 사용하게 된다.

    • 실제로 ActionForm의 프라퍼티와 검증 규칙의 연결은 <formset><form>..</form></formset>에서 시작된다.

    name 속성 : struts-config.xml에서 지정한 ActionForm의 이름이다. 


    • <form><field>...</field></form>부분에서 액션 폼의 각 필드와 검증 규칙을 연결한다.

    property 속성 : 액션 폼의 프라퍼티이다.

    depends 속성 : validator-rules.xml에 선언된 각 검증 규칙의 이름이다. 여기서 지정된 검증 규칙을 통과해야만 유효성 검사를 통과한 것이다. 검증 규칙이 여러개 필요할 때는 쉼표로 구분한다. 순서대로검증이 실행된다.

    <msg> 요소 : validator-rules.xml에 지정된 에러 메시지가 아닌 다른 에러메시지를 사용하기 위해 지정하는 요소

    name 속성 : 어떤 검증 규칙에서 에러가 발생했을 때 출력할 메시지인지 지정한다. depends 속성에 있는 값들중 하나    여야 한다.

    key 속성 : 리소스 번들 프라퍼티의 어떤 키의 값을 에러 메시지로 사용할지를 결정한다.

    <arg> 요소 : 오류 발생시 오류 메시지의 {0}, {1}, .. 부분에 삽입할 메시지들을 리소스 번들 프라퍼티에서 가져오도록 지정한다.

    key 속성 : 리소스 번들 프라퍼티의 키

    • <msg>와 <arg>요소의 resource 속성 : resource 속성을 “false”로 두면 리소스 번들에서 키에 해당하는 값을 검색해서 가져오는 것이 아니라 key 속성에 지정된 문자열을 그대로 사용한다.

    <var> 요소 : 유효성 검증기에 넘길 파라미터이다. 일반적으로 파라미터가 필요한 경우는 많지 않은데, mask 규칙의 경우에는 파라미터가 필요하다. mask 규칙은 액션 폼의 프라퍼티가 파라미터로 넘겨준 정규 표현식(regular expression)과 일치하는지 검사하는 규칙이다.

    <var-name> 요소 : 파라미터 이름

    <var-value> 요소 : 파라미터 값

Designed by Tistory.