Struts에서 ActionForm 처리
ActionForm 객체는 클라이언트에서 입력한 데이터를 비즈니스 계층으로 전달하는 역할을 합니다. Struts Framework에서는 사용자의 입력 화면에서 입력한 데이터를 자동으로 모아 ActionForm 인스턴스의 setter를 이용해 설정하며 이를 통해 비즈니스 계층으로 데이터를 전달 할 수 있습니다.
여기서 한가지 주의 할 점은 ActionForm을 비즈니스 계층으로 직접 전달 하기 보다는 적절한 DTO(Data Transfer Object)를 생성하는 것이 훨씬 효율적 입니다.
스트럿츠에서는 다음과 같이 ActionForm 을 처리 합니다.
1. Action의 매핑 정보를 확인 하고 Action이 설정 되어 있는지 확인 합니다. Action 매핑의 name 속성에 해당 하는 <form-bean > 매핑이 있는지 확인 하는 겁니다.
<!-- ========== Form Bean Definitions ================================ -->
<form-beans>
<form-bean name="loginForm" type="login2.LoginForm">
<form-property name="pwd" type="java.lang.String" />
<form-property name="id" type="java.lang.String" />
</form-bean>
</form-beans>
<!-- ========== Action Mapping Definitions ============================ -->
<!--valiedate를 true라고 함으로써 LoginForm의 validate가 호출됩니다. -->
<action-mappings>
<!-- loginAction에 대한 정의 -->
<action
path="/LoginSubmit"
type="login2.LoginAction"
name="loginForm"
validate="true"
input="/login.jsp"
/>
<!-- logoffAction에 대한 정의 -->
<action
path="/logoff"
type="login2.LogoffAction"
name="logoffForm"
validate="false"
/>
</action-mappings>
2. 메모리에 ActionForm 인스턴스가 있는지 확인하여 이미 만들어진 타입이 같고 scope가 적당 한 것이 있으면 재사용하고 없으면 새로 인스턴스를 생성 합니다. 새 인스턴스를 만드는 경우엔 scope 속성이 있다면 속성에 따른 scope에 저장 합니다.
3. ActionForm의 reset 메소드를 호출 합니다.
public void reset(ActionMapping mapping, HttpServletRequest request) {
pwd = "";
id = "";
}
4. ActionForm의 setter를 통해 요청 파라미터 값을 ActionForm에 입력 합니다.
public void setId(String id) {
this.id = id;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
5. validate속성이 “true”로 설정 되어 있으면 validate() 메소드를 실행 하고 에러가 있다면 에러를 반환 합니다.
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if((id == null) || (id.length()<1)) {
errors.add("error.id.required", new ActionError("error.id.required"));
}
if((pwd == null) || (pwd.length()<1)) {
errors.add("error.pwd.required", new ActionError("error.pwd.required"));
}
return errors;
}
폼 데이터를 전송 하는 모든 HTML 페이지에서 ActionForm 사용해야 하는데 HTML의 폼필드의 이름과 ActionForm의 속성의 이름이 일치한다면 ActionForm을 여러 페이지에서 사용 가능 합니다.
중요한 메소드는 reset(), validate() 메소드 인데 하나씩 보도록 하죠~
reset() 메소드의 원형은 다음과 같습니다.
public void reset(ActionMapping mapping, HttpServletRequest request);
스트럿츠의 ActionForm 클래스의 위 두메소드는 기본적으로 아무 기능도 수행 하지 않으므로 ActionForm을 상속한 하위 클래스에서 필요하다면 재정의(Override) 해야 합니다.
Controller는 요청 파라미터에 있는 ActionForm의 인스턴스에 입력 하기전에 reset() 메소드를 수행 합니다. 결국 reset이라는 것은 초기화의 의미이며 폼빈의 인스턴스를 공유하는 경우엔 중요한 부분 입니다.
Controller는 요청값들이 ActionForm의 setter에 의해 설정 되면 validate가 “true”로 설정 된 경우에는 valiedate() 메소드를 호출 하는데 이 메소드에서는 사용자의 입력 값에 대한 validation check를 수행 합니다. 오류가 있다면 ActionError 객체에 담아서 리턴 합니다. ActionForm에서의 validate()는 비즈니스 로직 이라기 보다는 입력 값의 단순한 검사 정도로 보시면 되며 실제 들어온 값에 대한 논리적인 타탕성등 여러가지 검사를 하기 위해서는 별도의 비즈니스 로직을 만들어 처리해야 합니다.
validate() 메소드의 원형은 다음과 같습니다.
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request);
평일주간[100%환급과정]
(8/04)C#4.0,WinForm,ADO.NET(8/04)자바기초JDBC,Servlet/JSP까지
(8/04)Spring,MyBatis,Hibernate실무과정
(8/11)PL/SQL,ORACLE HINT,TUNING
(8/11)SQL기초에서 Schema Object까지
(8/11)안드로이드개발자과정
(8/11)채용예정교육
평일야간[개인80%환급]
(8/04)웹퍼블리싱 마스터
(8/05)JSP,jQUERY,Spring,MyBatis
(8/06)Spring3.X, MyBatis, Hibernate
(8/08)C#,Network,ADO.NET,ASP.NET
(8/11)SQL기초에서실무까지
(8/11)안드로이드개발자과정
(8/28)자바JSP,jQuery,Spring,MyBatis
주말주간[개인80%환급]
(8/02)Spring3.X, MyBatis, Hibernate
(8/02)C#,ASP.NET마스터
(8/02)웹퍼블리싱 마스터
(8/02)SQL초보에서 Schema Object까지
(8/09)SQL기초에서실무까지
(8/09)안드로이드개발자과정
(8/09)자바JSP,Ajax,jQuery,Spring,MyBatis
(8/23)JAVA,Network&WEB&Framework
주말야간[개인80%환급](18:30~22:20)
(8/02)JAVA,Network&WEB&Framework
댓글 없음:
댓글 쓰기