2013년 8월 8일 목요일

[오라클자바커뮤니티]Struts Validation Rule 강좌, oraclejavanew.kr

Struts Validation Rule 


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  




Validator Framework에는 두개의 설정 파일(validation.xml, validator-rules.xml)이 있습니다. 

===================================================
1.        validation-rules.xml
===================================================

애플리케이션에서 사용하는 전체적인 검증 규칙을 포함, 애플리케이션에 독립적이므로 다른 스트럿츠 애플리케이션에서 사용 가능 합니다.

기본적인 규칙을 수정하거나 확장하는 경우에만 이 파일을 수정 합니다.

파일의 구성을 살펴보면 ROOT ELEMENT인 <form-validation>은 한 개 이상의 global 요소를 필요로 합니다.

<!ELEMENT form-validation (global+)>
<!ELEMENT global (validator+) >

각각의 validator는 유일한 한가지의 검증 규칙을 나타냅니다. 다음은 required 규칙에 대한 선언 부분 입니다. 또한 validator 요소는 자바스크립트를 지원합니다.

<validator name="required"
        classname="org.apache.struts.validator.FieldChecks"
        method="validateRequired"
        methodParams="java.lang.Object,
                      org.apache.commons.validator.ValidatorAction,
                      org.apache.commons.validator.Field,
                      org.apache.struts.action.ActionMessages,
                      javax.servlet.http.HttpServletRequest"
        msg="errors.required"/>

    name : 규칙의 논리적인 이름
    classname : 검증 로직을 포함하는 클래스
    method : 검증 로직을 포함하는 메소드
    methodParams : 메소드의 매개 변수
    msg : 리소스 번들의 키값
depends : 명시된 규칙 이전에 호출 해야 하는 검증 규칙
jsFunctionName : 자바스크립트 함수를 명시,
기본적으로 Validator의 실제 이름을 주로 사용 합니다.


<intRange>규칙을 보면 depends 부분이 기술 되어 있는데 참고 바랍니다. 즉 정수 값의 범위를 체크하기 이전에 정수형인지 체크가 이루어져야 한다는 것 입니다.

<validator name="intRange"
            classname="org.apache.struts.validator.FieldChecks"
            method="validateIntRange"
            methodParams="java.lang.Object,
                      org.apache.commons.validator.ValidatorAction,
                        org.apache.commons.validator.Field,
                      org.apache.struts.action.ActionMessages,
                      javax.servlet.http.HttpServletRequest"
            depends="integer"
            msg="errors.range"/>

다음은 Validator Framework의 기본적인 리소스 번들의 키 입니다.

# Struts Validator Error Messages
  errors.required={0} is required.
  errors.minlength={0} can not be less than {1} characters.
  errors.maxlength={0} can not be greater than {1} characters.
  errors.invalid={0} is invalid.

  errors.byte={0} must be a byte.
  errors.short={0} must be a short.
  errors.integer={0} must be an integer.
  errors.long={0} must be a long.
  errors.float={0} must be a float.
  errors.double={0} must be a double.

  errors.date={0} is not a date.
  errors.range={0} is not in the range {1} through {2}.
  errors.creditcard={0} is an invalid credit card number.
  errors.email={0} is an invalid e-mail address.

-----------------------------------------
다음은 GenericValidator의 기본 검증 규칙 입니다.
-----------------------------------------

Table 4.1: Common Validator Rules
Rule Name(s)                        Description                                 
required            The field is required. It must be present for the  form to be valid.     
minlength          The field must have at least the number of characters as the
specified minimum length.
maxlength          The field must have no more characters than the specified
maximum length.
intrange, floatrange,
doublerange        The field must equal a numeric value between the min and max variables.
byte, short, integer, 
long, float, double  The field must parse to one of these standard  Java types (rules names
equate to the expected Java type).
mask              The field must match the specified regular expression (Perl 5 style).
date                The field must parse to a date. The optional variable datePattern
specifies the date pattern
(see java.text.SimpleDateFormat in the Java-Docs to learn how to
create the date patterns).
You can also pass a strict variable equal to
creditCard          The field must be a valid credit card number. None


==============================================
2.        validation.xml
==============================================


이 파일은 애플리케이션에 종속적이며 특정한 ActionForm에서 사용하는 validation-rules.xml 파일의 검증 규칙을 나타냅니다. 그러므로 ActionForm 안에서는 검증을 위한 별다른 소스의 변경이 필요 없다는 이야기가 되며 validation.xml 파일에서 검증 로직은 ActionForm 한 개 이상과 연동 됩니다.

XML 형식은 다음과 같습니다.

<!ELEMENT form-validation (global*, formset+) >
<!ELEMENT global (constsnts*) >
<!ELEMENT formset (constant*, form+) >

Constants 요소는 자바 프로그래밍에서 상수를 선언하는 것과 매우 유사 합니다.

<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-
| ]?(\d{4})$</constant-value>
</constant>
<constant>
<constant-name>zip</constant-name>
<constant-value>^\d{5}(-\d{4})?$</constant-value>
</constant>
</global>

다음은 간단한 validation..xml 파일 입니다.

<form-validation>
<global>
<constant>
<constant-name>phone</constant-name>
<constant-value>^\(?(\d{3})\)?[-| ]?(\d{3})[-
| ]?(\d{4})$</constant-value>
</constant>
</global>
<formset>
<form name="checkoutForm">
<field
property="phone"
depends="required,mask">
<arg0 key="registrationForm.firstname.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
</field>
</form>
</formset>
</form-validation>


<!ELEMENT formset (constant*, form+) >

한편 <formset> 이라는 요소는 <constant>와  <form> 이라는 두개의 요소를 포함 할 수 있는데 <constant> 요소는 <global> 섹션의 <constant>와 유사하여 생략도 가능 하지만 form 요소는 한번 이상 나타나야 합니다. (<formset> 요소는 국제화를 위한 language와 country를 지원 합니다.)

<form>요소는 하나 이상의 <field>를 포함할 수 있으며 XML 형식은 다음과 같습니다.

<!ELEMENT form (field+)>

<field> 요소는 검증을 해야 할 자바빈의 특정 프로퍼티와 일치해야 하며 스트럿츠 애플리케이션에서의 자바 빈은 결국 ActionForm을 의미 합니다.

다음은 field의 속성 입니다.

property :    자바빈(혹은 ActionForm)에서 검증해야 할 프로퍼티 이름
depends :    field 요소에 적용 할 검증 규칙의 목록, 각 검증 규칙은 여러 개가 올 수 있으며 이럴경우 콤마로 구분, 검증이 이루어 지기 위해서는 모든 규칙을 만족 시켜야 합니다.
page :      자바빈이 대응 할 페이지, 자바빈은 page 속성이 속해 있는 form과 대응
indexedListProperty : 리스트를 읽어 가면서 필드를 검증 하는 경우에 이용


field 요소는 다음과 같이 여러 가지 요소를 포함 합니다.

<!ELEMENT field (msg?, arg0?, arg1?, arg2?, arg3?, var*)>

<msg> 요소는 리소스 번들의 키 값이며 이 값을 기본 메시지 대신 이용 할 수 있습니다. 즉 검증이 잘못된 경우 이 메시지의 값이 출력 됩니다. msg를 사용하지 않으면 기본적으로 등록된 메시지가 출력 됩니다.  아래와 같은 메시지…

errors.required={0} is required.
  errors.minlength={0} can not be less than {1} characters.
  errors.maxlength={0} can not be greater than {1} characters.
  errors.invalid={0} is invalid.

또한 msg는 3개의 속성이 있는데…다음과 같습니다.

name : msg요소가 사용할 검증 규칙, 반드시 validation-rules.xml 파일이나 global 섹션에 명시한 규칙 이어야 합니다.

key : 검증 실패 시 ActionError에 추가 할 수 있는 리소스 번들의 키값, resource 속성을 false로 할 경우 리소스 번들을 사용하지 않고 key 속성에 문자열을 직접 넣을 수 있습니다.

아래의 예를 참고 하세요~

<field property="phone" depends="required,mask">
<msg name="mask" key="phone.invalidformat"/>
<arg0 key="registrationForm.firstname.displayname"/>
<var>
<var-name>mask</var-name>
<var-value>${phone}</var-value>
</var>
</field>


------------------------
Validator 플러그 인
------------------------

Validator Framework을 사용하기 위해서는 struts-config.xml에서 PlugIn 설정을 해야 합니다.

<plug-in>
className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEBINF/
validator.xml"/>
</plug-in>

스트럿츠 애플리케이션이 구동 할 때 ValidatorPlugIn 클래스의 init() 메소드가 호출되며 이 메소드가 실행 하면서 XML 파일의 Validator 리소스 들을 메모리에 적재 합니다. 

댓글 없음:

댓글 쓰기