2010年9月23日 星期四

Struts 教學 - ActionForm

ActionForm (org.apache.struts.action.ActionForm) 基本上是個 JavaBean

擁有與 JavaBean 相同的一些規則,譬如對於屬性都須有 get/set method

而一般你建立一個 ActionForm 時都必須繼承 org.apache.struts.action.ActionForm

並且必須在組態檔 struts-config.xml 中的 <form-beans> 標籤裡建立 <form-bean>



<form-beans >
        //以下是一個 name 為 Member 並指定 type 為你繼承 ActionForm  的類別        
        <form-bean name="Member" type="fsc.useActionForm.Member" >
</form-beans >

其中有一些方法你可以覆寫它,這部份之後再多做說明。

這邊先來寫一個簡單的 ActionForm

首先也是先以 form 請求,並設定一些請求參數,大致如下:


<form action="/funinStruts/useAction.do" method="POST" >
        帳號 : <input type="text" name="username" /><br/>
        密碼 : <input type="text" name="password" /><br/>
        Say Something <input type="text" name="some" size="10" /><br />
        <input type="submit" value="送出" />
</form>


之後再建立一個 ActionForm,程式如下:


package fsc.useActionForm;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
public class Member extends org.apache.struts.action.ActionForm
{
    private String username; //請求參數的 username
    private String password; //請求參數的 password
    private String some;  //請求參數的 some
    public Member() {
        super();
    }

    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getSome(){
        return some;
    }
    public void setSome(String some){
        this.some = some;
    }
}
看到以上的程式跟一般在寫 JavaBean Mode 時幾乎一樣吧 !!

第二步就是配置你的 ActionForm 到組態檔中,如一開始所述

<form-beans&>
        <form-bean name="Member" type="fsc.useActionForm.Member"/&>
</form-beans&>

最後就是建立 Action 了,程式如下:

package fsc.useActionForm;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class useAction extends org.apache.struts.action.Action {
    private static final String SUCCESS = "success";
    private static final String ERROR = "error";
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //要在 Action 中取的 ActionForm 可以透過傳入的參數取得,記得要轉型
        Member m = (Member)form;
     //以下是使用 ActionForm 定義的 getXXX method
        if(m.getUsername().equals("hello") && m.getPassword().equals("123456789")){
            return mapping.findForward(SUCCESS);
        }
        return mapping.findForward(ERROR);
    }
}
以下是該 Action 在組態檔中的配置

<action path="/useAction" name="Member" scope="request" type="fsc.useActionForm.useAction" >
    <forward name="success" path="/useActionForm/success.jsp" />
    <forward name="error" path="/useActionForm/error.jsp" />
</action>

最後再以一張 JSP 呈現 success.jsp


<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="bean" uri="/WEB-INF/tags/struts-bean.tld" %>
//HTML省略部份....
<bean:write name="Member" property="password" /%>
<bean:write name="Member" property="some" /%>
//HTML省略部份....


這邊簡單介紹一下如何設定或是取得˙ActionForm 的屬性值

1. 如上的 success.jsp 透過 Struts HTML 的標籤庫
    利用 <bean> 標籤,name 為組態檔中 form-bean 設定的 name 屬性
    property 屬性為 ActionForm 中設定的屬性,記得要匯入標籤庫


2. 透過 request 或是 session 取出 ActionForm 物件
    Member m = (Member)request.getAttribute("Member");


3.就是上述提到的,在覆寫 Action 的 execute method 時透過傳入的 ActionForm 物件
    就可執行它的相關操作了

沒有留言:

張貼留言