DynaActionForm 클래스

 
DynaActionForm 클래스

ActionForm을 이용하면 개발 시간을 줄일 수 있는 이점이 있지만 심각한 단점이 있습니다. 그 단점이라 함은 Action이 늘어 날 때 마다 엄청난 ActionForm 클래스가 생겨나야 한다는 점 입니다.

비록 ActionForm을 여러 페이지에서 공유 한다고 하더라도 유지보스 역시 어려워지게 되는 것 입니다. 그래서 머리를 좀 써 ActionForm은 하나만 만들고 그 안에 모든 속성의 처리를 끝내 버리는 사람들도 있습니다. 그러나 이 방식은 여러 명이 공동 프로젝트를 수행 하는 경우엔 이 클래스에 대해 경합이 발생 하므로 좋지 못합니다.

그리고 또한 HTML폼으로부터 얻어내는 프로퍼티를 ActionForm안에 정의 해야 한다는 것이고 추가 되거나 제거 되는 경우엔 ActionForm이 다시 컴파일 되어야 한다는 것 입니다.

이러한 이유 때문에 동적이며 애플리케이션에서 ActionForm의 실제 구현 클래스를 만들 필요가 없는 새로운 ActionForm  클래스가 스트럿츠 프레임워크에 추가되게 된 것 입니다.

동적인 ActionForm과 그렇지 않은 ActionForm의 차이는 ActionForm이 정의하는 프로퍼티, validate() 메소드, reset() 메소드 입니다.


---------------------------
동적인 ActionForm 설정
---------------------------

DynaActionForm을 사용하기 위해서는 일반 ActionForm과 같이 설정 파일에 <form-bean>요소를 추가해야 합니다.

설정 파일에서의 차이점은 동적인 ActionForm은 프로퍼티를 갖기 위해 내부에 form-property를 하나 이상 포함해야 한다는 것 입니다. DynaActionForm은 프로퍼티의 키/값 쌍을 저장하기 위해 java.util.Map을 사용 합니다. 즉 프러임워크에서 form-property 요소를 Map으로 로딩하여 설정 합니다.

아래는 그 설정 예 입니다.

<form-beans>
<form-bean
name="loginForm"
type="org.apache.struts.action.DynaActionForm">
<!-- Specify the dynamic properties of the form -->
<form-property  name="email" type="java.lang.String "/>
<form-property name="password" type="java.lang.String "/>

<!-- You can also set the initial value of a property -->
<form-property  initial="false" name="rememberMe"  type="java.lang.Boolean "/>
</form-bean>
<form-beans>


이와 같이 설정하면 이 ActionForm을 동적으로 만들어 주는데 런타임에 DynaAction클래스의 인스턴스를 생성 하고 설정된 프로퍼티를 위한 get, set 함수를 제공해 줍니다. 새 프로퍼티를 추가 하기 위해서는 설정만 수정하면 자동으로 다 해결 되므로 소스코드를 수정 할 필요는 없습니다.

ActionForm의 reset() 메소드는 기본적으로 아무 동작도 하지 않았지만 DynaActionForm의 reset() 메소드는 모든  프로퍼티를 초기 값으로 초기화 합니다.


===========================================================

[예]

-----------------
설정 파일에서…
-----------------
<form-beans>
<form-bean name="CalcForm" type="org.apache.struts.action.DynaActionForm">                  
            <form-property name="s1" type="java.lang.String" />                    
            <form-property name="s2" type="java.lang.String" />    
        </form-bean>
    </form-beans>

----------------------------------
Action 클래스에서  값을 읽어 오기
----------------------------------

DynaActionForm dForm = (DynaActionForm)form;
            
int s1 = Integer.parseInt(dForm.get("s1").toString());
int s2 = Integer.parseInt(dForm.get("s2").toString());

by 머로할까 | 2008/07/31 13:39 | STRUTS | 트랙백 | 덧글(0)

트랙백 주소 : http://bowwowmew.egloos.com/tb/646335
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶