※ Struts – Validator
Validator 프레임워크는 요청 파라미터의 검증을 프로그래밍 할 필요 없이 검증 규칙의 선언만으로 해결할 수 있도록 해준다.
즉 검증 규칙을 외부의 설정 파일에 정의한다는 뜻이다.
Struts Framework의 장점.
-
이미 살펴본 것처럼 ActionForm클래스의 validate() 메소드를 통해 검증할 수 있었습니다.
Struts Framework의 단점.
-
많은 필드 값들이 똑같은 검증 로직을 포함할 경우 각각의 validate() 메소드 내에도 똑같은 검증 코드가 죽복되어 질수 있다.
Struts Framework의 단점을 보완하기 위한 Validator framework
David Winterfeldt는 Validator framework을 Struts를 위한 third-party add-on으로 만들게 되었고 나중엔 Struts core에 포함되게 됩니다. 현재는 Struts core와 함께 배포됩니다( 하지만, 별도의 Jakarta Commons project랍니다)
-
Validator framework는 몇몇 (미리 정의된)validation 루틴과 함께 패키징 되어 배포됩니다. 이것들을 이용해서 validation logic을 어렵지 않게 적용할 수도 있습니다.
-
각각의 validate() 메소드를 코딩하는 대신, validator를 이용하게 되면, 검증 방식을 정의 하기 위해 XML 설정파일을 사용하게 될 것이고, 이 설정내용이 각각의 폼 빈에 적용됩니다.
-
Validator에 의해 제공되지 않는 검증 방식이 필요하다면, 사용자 정의 검증방식(custom validation)을 Validator에 껴 넣을 수도 있습니다.
-
Validator는 server-side / client-side validation 양 쪽에서의 검증을 지원합니다. 폼 빈의 경우 server-side 검증 인터페이스만을 제공하는데 이와는 다르죠
※ Validator Overview
Validator는 두 개의 XML 설정 파일을 사용합니다. 어떤 검증 루틴이 사용될 것인지, 어떻게 그 루틴들이 애플리케이션에 적용될 것인지를 기술하는 파일이죠.
validator-rules.xml
- 이 파일에 어떤 검증 루틴이 사용(설치)되는지를 기술한다.
- 검증 루틴(validation rutine)을 선언 하고, 이 각각의 검증 루틴에 대한 이름(local name)이 할당된다.
validation.xml
- 어떤 검증 루틴이 어떤 폼 빈(Form Bean)에 적용될 것인지를 기술합니다.
- Struts-config.xml 파일에서 정의된 폼 빈의 이름과 validator-rules.xml 에서 정의된 검증 루틴의 이름을 사용해서 ‘어떤 빈에 어떤 검증 루틴이 사용될 것’인지를 기술하게 되죠.
※ Validator 사용하기
- Validator 플러그 인을 사용 가능하게 한 후에
- 두 개의 설정 파일을 손보고
- 폼 빈을 만들면 됩니다.
※ 다음과 같은 술서로 살펴보겠습니다.
1.Enabling the Validator Plugin
- Validator가 Struts와 함께 패키징 되어 배포 되지만, 기본적으로 바로 사용가능하도록 설정되어 있는 것은 아닙니다.
- Validator를 사용할 수 있도록 하려면, 다음과 같은 설정을 Struts의 설정 파일에 추가시켜줘야 합니다
- 위의 설정은 Struts가 Validator 플러그인을 로드하고 초기화 하도록 합니다. 일단 초기화가 되면, 플러그인은 콤마로 분리된 Validator 설정 파일( pathnames 속성에 기술된)을 로드(load)합니다.
2. Creating Form Beans
- Validator를 사용하기 위해선, 여러분이 작성하는 폼빈이 ActionForm 클래스가 아닌 'Validator의 ActionFrom 클래스'를 상속해야합니다.
* Validator의 ActionFrom클래스는 여러분의 애플리케이션이 Validator 프레임워크에 연결되도록 ActionFrom 클래스의 reset()과 validate()메소드를 구현합니다.
- 여러분이 직접 validate() 메소드 내에 검증 코드를 구현하지 않아도 됩니다. Validator가 여러분을 위해 검증 코드를 제공하기 때문이죠.
- Struts에서 제공되었던 기능 구현 방법과 비슷하게, Validator는 폼 빈(From Bean)을 만들 때, 두 가지의 선택 옵션을 제공합니다.
그 첫 번째는 다음의 코드 처럼 구체적인 폼 빈(From Bean) 객체를 만드는 것입니다.
<-- 첫번재 방법 -->
1. 먼저 폼빈 클래스를 작성한다.
LogonForm 클래스 들여다 보기
이 클래스는 ActionFrom 대신 ValidatorForm 클래스를 상속합니다.
이 클래스는 reset() 이나 validate() 메소드를 구현하고 있지 않습니다.
일반적인 폼 빈을 Struts의 설정 파일에 등록했던 것처럼, 설정 파일에 설정해주면 됩니다.
2. 폼빈 설정(struts-config.xml)
<form-beans>태그의 name 속성은 validation.xml 파일에 검증내용(validation)을 정의할 때 사용될 것입니다.
3. Validation.xml 파일에 validation 설정
Validator는 2번 폼빈설정에서 '폼빈 태그의 name 속성값'을 validation.xml에 정의된 검증내용(validation)과 매칭합니다.
<-- 두번재 방법 -->
Struts 설정 파일에 Dynamic 폼빈을 설정하는 방법입니다,
- Dynamic Form Beans을 이용하면 실제 클래스를 작성하지 않아도 됩니다; 폼 빈이 가져야 하는 속성 값들만 정의해주면, 스트럿츠가 알아서 해당 폼 빈을 작성해줍니다.
* Validator를 이용하려면, org.apache.struts.action.DynaActionForm가 아닌 org.apache.struts.validator.DynaValidatorForm 타입의 폼빈을 지정해줘야한다는 것만 다릅니다.
- 첫 번째 방법에서와 마찬가지로, Dynamic Form Bean에 주어진 name은 validation.xml 파일에 validation을 정의할 때 사용할 것입니다(validation.xml파일의 내용은 따로 보지 않겠습니다)
◆ 앞서 본 두 가지의 폼빈 생성 방법에 덧붙여, 하나의 폼빈을 정의한 뒤에 여기에 다수의 validation을 연결하는 방법도 제공됩니다.
ValidationFrom 이나 DynaValidatorFrom 기반의 폼빈을 이용할 때 폼빈과 validation.xml 파일의 validation 내용과 매핑하기 위해서, 스트럿츠 설정파일의 폼빈에 대한 이름(logical name)을 사용하는데,
대부분의 경우엔 적절하지만, 그럿지 못한 경우도 있습니다. 여러 개의 액션이 하나의 폼빈을 공유하여 사용할 때이죠, 이 경우 어떤 액션은 그 폼빈에 선언된 모든 속성(field)을 모두 사용할 수도 있지만, 다른 액션은 그 중 몇 개만을 사용할 수도 있습니다. 이럴 경우 에러가 발생하겠죠.
이런 문제를 해결하기 위해, Validator는 validation을 폼빈에 연결하는 대신 액션에 연결할 수 있도록 해주는 두 개의 클래스를 제공합니다.
구체적인 폼빈(concrete form bean)을 작성할 경우엔 org.apache.,struts.validator.ValidatorActionFrom 을 상속하고...
다이나믹 폼빈(Dynamic Form Bean)을 사용하려면, org.apache.struts.validator.DynaValidatorActionFrom 을 Struts 설정 파일에 설정해주면 됩니다.
그리고 나서, validation.xml 파일에(확인), 폼빈의 이름에 매핑하지 않고, 액션 경로(action path)에 매핑해주면됩니다.
다음의 validation.xml 파일은 동일한 폼 빈에 적용되는 두가지의 validation 을 보여줍니다.
여러분이 작성한 폼 빈이 ValidatorActionForm 클래스나 DynaValidatorActionForm을 상속할 것이기 때문에, Validator는 validation을 찾기 위해 폼 빈의 이름(logical name)대신 액션 경로(action path)를 이용하는 방법을 알고 있습니다.
◆ Using Validator in Conjunction with the Form Bean's reset() and validate() methods.
앞서 말한대로, Validator의 ActionFrom 서브클래스를 이용하면, reset()이나 validate()메소드를 구현해 줄 필요가 없지만, 어떤 경우에는, 여러분 자신의(사용자 정의) 유효성 검사나 초기화가 필요한 경우도 있다.
이럴 때엔, reset()이나 validate() 메소드를 오버라이딩 한 후에, 자신의 코드를 메소드에 추가 하기 전에 꼭 super.reset()과 super.validae() 메소드를 먼저 호출하도록 하라.
◆ Configuring validator-rules.xml
대부분의 경우에는 미리 설정된 것을 사용하기만 하면 되고, 수정 해야 할 일이 많지 않습니다.
validator-rules.xml에 있는 각각의 validation 루틴은 validator 태그에 선언된 자신만의 정의내용(definition)이 있습니다.
-
validator 태그는 루틴에 대한 이름을 부여하는 데 사용되며(name attribure) 이 루틴에 사용퇸 클래스와 메소드 이름을 지정합니다.
- 논리 이름(logical name)은 이 파일 안의 다른 루틴에 의해 참조될 때는 물론 validation.xml 파일의 validation 정의(validation definition)에 의해 참조될 때 사용횝니다.
- msg: 검증이 실패 했을 때의 에러 메시지로 사용될, 리소스 번들 내의 메시지를 위한 key 값을 지정합니다.
- the jsFuction : 검증 루틴(validation runtine)에 필요한(쓰이는) '클라이언트 쪽에서 실행될 자바스크립트 코드에 대한 경로'를 지정합니다.
이 글은 스프링노트에서 작성되었습니다.
'Programming' 카테고리의 다른 글
[PHP 강좌] 33. 관계형 게시판 만들기 1 - (DB 설계) (1) | 2010.02.11 |
---|---|
소스 사이트 (0) | 2010.01.08 |
Ajax의 정의 (0) | 2010.01.07 |
ValueOf 와 parseInt의 차이점. (0) | 2010.01.07 |