2013년 8월 8일 목요일

[오라클자바커뮤니티, ORACLEJAVANEW.KR]

Struts Framework의 DynaActionForm 클래스에 대해 알아봅니다...


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


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()); 

댓글 없음:

댓글 쓰기