擁有與 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&>
</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 物件
就可執行它的相關操作了
沒有留言:
張貼留言