Validator
사용자 입력 값을 검증하는 여러가지 방법 중에서 일반적으로 많이 사용하고 있는 방법이
JSP페이지 내에서 javascript 함수를 이용해 사용자 입력 값을 검증하는 방법이다. 하지만 이런 방법으로는
완전한 검증을 할 수 없기 때문에 Sever측에서 다시 한번 검증하는 것이 필요하다. Validator는 Struts 1.1부터
배포된 프레임워크로 ActionForm에 대한 유효성 검사를 편리하게 도와주고 있다. 본 문서에서는 Validator를
사용하기 위한 플러그인 등록 및 Struts에서 제공하고 있는 validator-rule에 대해서 소개하기로 한다.
Validator 설정 및 사용 방법
Plug-in 등록
struts-config.xml에 plug-in 등록
Validator를 사용하기 위해서는 struts-config.xml에 org.apache.struts.validator.ValidatorPlugIn을 등록해야 한다.
ValidatorPlugIn은 property로 pathname을 가지며 pathname의 값으로는 Struts에서 기본으로 제공하고 있는 검증 규칙이 정의되어 있는
validator-rules.xml과 사용자가 검증한 ActionForm에 대한 검증 규칙을 정의한 xml파일을 세팅한다.
Samples
다음은 Validator Plug-in을 설정한
struts-config-validator.xml
의 일부분이다.
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames"
value="/org/apache/struts/validator/validator-rules-compressed.xml,
/WEB-INF/validator/validation-sample.xml" />
</plug-in>
Struts에서는 일반적으로 많이 사용하고 있는 검증 규칙에 대한 정의가 포함된 validator-rules.xml과
validator-rules-compressed.xml을 struts-core-1.3.x.jar파일에 같이 배포하고 있다.
validation-sample.xml은 검증하고자 하는 ActionForm에 대한
formset 설정
이 포함되어 있다.
Validator Rules
Struts Validator Rules 기본 기능
Struts에서 기본적으로 많은 검증 규칙을 제공하고 있기 때문에 사용자가 검증규칙을 새로 작성하는 번거로운 작업이 많이 줄어들었다.
다음은 validation rule 설정의 예이다.
<validator name="minlength"
classname="org.apache.struts.validator.FieldChecks"
method="validateMinLength"
methodParams="java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.apache.struts.action.ActionErrors,
javax.servlet.http.HttpServletRequest"
depends="required"
msg="errors.minlength">
<javascript><![CDATA[function validateMinLength(form) {
// javascript를 사용하고자 할 경우 여기에 작성하면 된다.
}]]>
</javascript>
</validator>
name 은 unique 해야 하며 다른 rule에서 참조할 때도 name을 사용하게 된다.
classname과 method는 실제 validation 로직이 들어있는 클래스와 메소드의 이름이다.
depends 는 validator rule 간의 우선순위이다. 위의 예는 minlength를 체크하기 전에
required 라는 validation rule을 먼저 수행한다는 뜻이다.
depends="required,integer"라고 되어있다면 null 인지 체크하고, Integer 인지 체크하고 그 다음에 minlength를 체크하겠다는 뜻이다.
msg 는 validation error 가 발생했을 때 뿌려줄 메시지를 resource bundle 에서 가져올 때 사용할 key 값이다.
기본적으로 다음의 값들을 사용한다.
# 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.
다음은 validator-rules.xml에 포함되어 있는 검증 규칙에 대한 설명이다.
| Name |
Description |
<var-name> |
| required |
입력 값이 반드시 존재해야 한다. |
- |
| validwhen |
다른 필드의 값을 비교한다. |
test |
| minlength |
입력 값의 최소 글자수를 제한한다. |
minlength |
| maxlength |
입력 값의 최대 글자수를 제한한다. |
maxlength |
| mask |
설정한 regular expression을 만족 해야한다. |
mask |
| date |
Date형태로 변환 가능해야 한다. |
datePatternStrice 또는 datePattern |
| creditCard |
신용카드 번호 규칙에 만족해야 한다. |
- |
| email |
e-mail 규칙에 만족해야 한다. |
- |
ActionForm
ValidatorForm의 상속
Validator를 이용할 때는 ActionForm이 아닌
org.apache.struts.validator.ValidatorForm을 상속 받아야 한다.
ValidatorForm은 유효성 검증에 필요한 validate() 메소드를 포함하고 있으며 검증 실패 시 ActionErrors에 error message를
셋팅해서 리턴한다.
Samples
다음은 ValidatorForm을 상속받은
ValidatorSampleForm.java
의 일부분이다.
public class ValidatorSampleForm extends ValidatorForm{
private String userName;
private String userId;
private String password;
private String phoneNumber;
private String email;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
//중략
}
}
formset 설정
formset 설정 방법
validator-rules.xml에 등록된 검증 규칙과 ActionForm과의 매핑을 하기 위해서는 formset을 정의해야 한다.
다음은 <form>의 attribute들이다.
| Attribute |
Description |
| property |
ActionForm subclass의 property에 해당한다. |
| depends |
하나 이상의 Validation rule들을 지정한다 |
| page |
Multi-page ActionForm에서 페이지 번호를 지정할 때 사용 |
| indexedListProperty |
ActionForm 에서 Collection을 return하는 property name |
Sample
다음은 ValidatorSampleForm에 Struts에서 제공한 검증규칙을 적용하기 위해 설정한
validation-sample.xml
의 일부분이다.
<form name="validatorSampleForm">
<field property="userName" depends="required,minlength,maxlength">
<arg key="validator.sample.userName" position="0"/>
<arg name="minlength" key="${var:minlength}" resource="false" position="1"/>
<arg name="maxlength" key="${var:maxlength}" resource="false" position="1"/>
<var>
<var-name>minlength</var-name>
<var-value>4</var-value>
</var>
<var>
<var-name>maxlength</var-name>
<var-value>10</var-value>
</var>
</field>
<!-- 중략 -->
<field property="email" depends="email">
<arg key="validator.sample.email" position="0"/>
</field>
</form>
<form>의 name attribute에 struts-config.xml에 등록된 ActionForm의 form name을 등록하고
<form의 하위의 <field>에 ActionForm의 유효성 검사를 할 attribute에 대한 설정을 등록한다.
위의 Sample에서는 userName은 필수 입력값에, 4자리 이상 10자리 이하로 설정을 했고 email은 e-mail 주소 검증 규칙을
적용했다.
유효성 검증에 실패하면 arg 값을 에러 메시지의 arguements로 설정하여 돌려주게 된다.
기본으로 arg0-arg3 요소는 message resources에서 해당 key 값으로 찾게되고. resource 속성이 false로 설정되면
message resources에서 찾지 않고 해당 값을 바로 돌려준다.
validation.xml은 크게 global 과 formset 으로 나누는데 global은 file 내에서 상수로 사용될 값들을 정의한다.
formset은 다시 constant 와 form으로 나누는데 constant는 global과 같으며
form 은 validation을 적용할 ActionForm 에 매핑된다. 참고로 formset 에는 language와 country라는 attribute 가 있어서
다국어 지원이 가능하다.
Action 매핑 설정
struts-config.xml의 Action 매핑 설정
RequestProcessor가 들어온 Request 정보를 이용해 ActionForm을 생성할 때 유효성 검증을 실행하기 위해서는 struts-config.xml의
<action>에
validate="true"를 설정해야 한다.
Sample
다음은 struts-config.xml의 <action>에 Validator를 적용하기 위한 설정을 보여주는
struts-config-validator.xml
의
일부이다.
<action
path="/validatorSample"
type="anyframe.sample.struts.basic.ValidatorSampleAction"
validate="true"
cancellable="true"
scope="request"
input="/basic/validatorSample.jsp"
name="validatorSampleForm">
<forward name="success" path="/basic/validatorSuccess.jsp"></forward>
</action>
Resources
다운로드
이클립스 프로젝트 형태의 샘플 웹 어플리케이션을 포함하고 있는 anyframe-struts-sample-basic.zip 파일을 다운받은 후,
테스트 환경 설정
을 참조하여 위에서 제시한 예제 코드를 실행해 볼 수 있다.
| Name |
Download |
| anyframe-struts-sample-basic.zip |
Download
|
참고자료