12.07.2015 Views

4.3.1.Action의 역할 - Anyframe

4.3.1.Action의 역할 - Anyframe

4.3.1.Action의 역할 - Anyframe

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ViewActionForm웹 어플리케이션에서 사용자의 입력을 받을 때 페이지에는 텍스트 박스, 버튼 등과 같은 컴포넌트들이 HTML 의 폼 요소 내에 포함되어 있고 사용자가 버튼을 누르게 되면 필드 내에 있는 값들이 HTTPrequest와 함께 서버로 submit 된다. 서버 어플리케이션은 request에서 이 입력 값들을 꺼내어 올바른데이터를 입력했는지 validation을 수행하고 나서 실제 비지니스를 수행하기 위해 Action으로 데이터를 넘기게 된다. 만일 입력 데이터가 validation rule을 통과하지 못한 경우 에러 메시지를 설정하여 입력 페이지로 돌아가게끔 처리해야 한다. 이처럼 요청에서 입력 값을 꺼내어 검증을 수행하고 실패에대한 에러 메시지를 출력하는 등의 기능을 직접 구현하는 것은 쉬운 일이 아니다. 또한 이런 작업은전체 어플리케이션 내에서 반복해서 일어나므로 재사용하는 것이 좋다. 이러한 작업들을 해주는 것이org.apache.struts.action.ActionForm 클래스 이다.• ActionForm의 역할• 요청에서 입력 값을 꺼내어 검증 수행, 실패에 대한 에러 메시지를 출력하는 등의 일련의 처리 과정을 재사용• ActionForm은 클라이언트의 입력 값을 Action으로 전달하고, 결과를 되돌려줄 수 있음• 입력 데이터들을 검증하는 동안 상태를 보관하는 버퍼로 동작• 확실하지 않은 입력 값들을 검증 룰을 통해 세밀하게 조사하기 전까지 비즈니스 계층 밖에 위치하도록 해주는 firewall 역할• ActionForm을 화면 표시 데이터로 설정하여 HTML 폼의 입력 필드를 쉽게 표시할 수 있음Html 입력 Form으로 부터 받은 parameter 들은 자동으로 ActionForm 객체에 채워진다. 검증을 위한validate() 메소드와 parameter가 ActionForm에 채워지기 전에 초기화 하는 reset() 메소드를 구현해야한다. struts-config.xml 에 ActionForm 에 대한 정의가 필요하다. ActionForm은 Model의 부분이 아니다. 비즈니스 처리를 수행하기 위한 Model 영역은 Controller / View 와 완전히 분리하여야 하며 직접 비즈니스 계층으로 전달해서는 안되고 ValueObject 나 Parameters 같은 형태의 DataTransfer Object를 생성하여 전달하도록 해야 한다.• ActionForm의 단점• 어플리케이션 개발자가 ActionForm의 서브클래스를 직접 구현해야 함• 많은 수의 클래스가 생겨날 수 있어서 유지보수 관리 어려움• validate() 메소드를 구현하려면 DynaActionForm을 상속받아 직접 구현해야함. Validator 프레임워크를 이용하는 것이 좋음.• DynaActionForm• 실제 구현 클래스들을 만들 필요가 없음• Property는 configuration파일에서 설정• validate() 메소드를 구현하려면 DynaActionForm을 상속받아 직접 구현해야함. Validator 프레임워크를 이용하는 것이 좋음.• ActionForm의 scope• ActionForm 객체가 저장되어 유지되는 context의 scope를 나타낸다.• session, request 2가지 레벨이 있다.• struts-config.xml 의 의 scope 속성으로 설정한다. default는 session이다. session scope일 경우 ActionForm의 제거에 유의해야 한다.• ActionForm의 LifeCycle24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!