1.ActionForm Class를 상속받아 FormBean Class를 만든다.
ex)InfoFormBean.java
package com.myhome.info.beans;
import org.apache.struts.action.ActionForm;
@SuppressWarnings("serial")
public class InfoFormBean extends ActionForm{
private int num;
private String name;
private String sex;
private String tel;
//사용자 jsp페이지에서 파라미터로 넘어오는 파라미터 네임과 같아야 한다.
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
2.struts-config.xml 에서 form-bean을 설정한다.
1) 기본적인 ActionForm을 사용할때
<form-beans>
<form-bean
name="bean"
type="com.myhome.info.beans.InfoFormBean"/>
</form-beans>
- name : 다른 config파일에서 사용할 이름을 사용자 편의 대로 정의 한다.
- type: 처음의 ActionForm Class를 상속받은 클래스의 패키지명과 클래스 이름을 설정한다.(InfoFormBean은 사용자 임의의 Class)
2) DynaActionForm 을 사용할때
- 사용자로 부터 파라미터로 넘어오는 값이 bean Class안에 정의 되어 있지 않거나 사용자로부터 어떠한 값이 넘어 올지 알 수 없을때 사용한다.
- ActionForm 처럼 ActionForm Bean Class를 만들 필요는 없고 xml 상에 선언만 해주면 된다.
<form-beans>
<!--
DynaActionForm은 예측할 수 없는 파라미터를 참조할때 사용한다.
-->
<form-bean
name="dyna"
type = "org.apache.struts.action.DynaActionForm">
<!--
form bean에 존재하지 않는 파라미터를 참조하기 위해 property를 설정한다.
-->
<form-property name="num" type="java.lang.Integer"/>
<form-property name="name" type="java.lang.String"/>
<form-property name="sex" type="java.lang.String"/>
<form-property name="tel" type="java.lang.String"/>
<form-property name="wdate" type="java.lang.String"/>
</form-bean>
</form-beans>
- name : ActionForm 와 같은 용도
- type : struts에서 제공되는 클래스를 사용하는 것이기 때문에 직접 DynaActionForm을 설정해 준다.
- <form-property> : 저장될 이름을 선언해 준다.
3.struts-config.xml 파일의 <action-mapping>에 <action>태그와 함께 설정한다.
1) ActionForm을 상속한 bean을 사용할때
예)
<action path = "/update"
name = "bean"
scope = "request"
input = "/info/modify.jsp"
type = "com.myhome.info.actions.InfoUpdateAction">
<forward name="success" path="/list.do" redirect="true"/>
</action>
- path : 주소창에 들어오는 URL 패턴, 이때 web.xml에 선언한 .do는 제거 하고 선언한다.
- name : 상단의 <form-beans>태그에 선언된 form-bean중 사용할 form-bean name을 적어 준다.
- scope : "request|session|application" - 다음의 영역으로 들어오는 정보
- input : 입력받은 폼 페이지 명 명시 - 정의된 곳에서 들어오는 데이터를 사용하겠다.
- type: Bussiness Logic을 수행할 Action Class 선언
- <forward> : Action class에서 actionForward로 'success' 를 보내면 path로 선언된 곳으로 보내겠다.
redirect = forward 부분에서 path만 잡아 주면 주소창은 변하지 않고 페이지만 변경 시킨다. 그래서 redirect를 true를 설정하면 주소 까지 바뀌어 버린다.
2)DynaActionForm 을 사용할 때
예)
<action path="/delete"
name = "dyna"
scope = "request"
input= "/info.modify.jsp"
type = "com.myhome.info.actions.InfoDeleteAction">
<forward name = "success" path = "list.do" redirect="true" />
</action>
※참고 : ActionForm 을 사용할때 꼭 필요한 attribute 들은 name, scope, input 이다.
4. Action에서 사용 방법
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
/*form parameter를 InfoFormBean으로 받는다*/
/**
* ActionForm의 역할
* Form parameter의 정보를 참조하기 위해
* ActionForm의 객체를 초기화 한다 - reset()
*
* form parameter의 정보를 받아 유효성 검사를 실시한다 - validate()
*
* 참조한 폼 정보를 form-bean에 설정된 bean으로 전달한다.
* */
InfoFormBean bean = (InfoFormBean)form;
/*bean의 객체를 Entity(DTO)로 property를 복사한다.*/
InfoDTO dto = new InfoDTO();
BeanUtils.copyProperties(dto, bean);
new InfoDAO().update(dto);
return mapping.findForward("success");
}
만약 ActionForm을 상속한 form객체를 사용하면 위와 같은 방식으로 하되 config.xml파일에서 bean을 DynaActionForm으로 구현 했다면 물론 위의
코드중
InfoFormBean bean = (InfoFormBean) form;
이코드는
DynaActionForm bean = (DynaActionForm)form;
으로 타입 케스팅을 해주어야 캐스팅 에러가 나지 않는다.
'Framework > STRUTS 1' 카테고리의 다른 글
struts 1 - File Uplod & File Download (0) | 2009.07.01 |
---|---|
Struts 1 - 스트럿츠 1의 다양한 Action Class 들 part 3 (0) | 2009.06.30 |
Struts 1 - 스트럿츠 1의 다양한 Action Class 들 part 2 (0) | 2009.06.29 |
Struts 1 - 스트럿츠 1의 다양한 Action Class 들 part 1 (0) | 2009.06.26 |
Struts 1 - 기본 (0) | 2009.06.25 |