而透過 DynaActionForm 則可以不必建立一個個的 ActionForm,而減少ActionForm 的數量
首先在使用 DynaActionForm 時跟 ActionForm 一樣須在 struts-config.xml 中的 form-beans 中設定
以下為範例程式,透過 form-bean 的 type 屬性設定為 org.apache.struts.DynaActionForm
即可建立一個動態的 ActionForm
<form-beans>
<form-bean name="loginForm" type="org.apache.struts.DynaActionForm">
<!-- form-property 標籤設定了表單中所有對應的參數 -->
<!-- name屬性指定了參數名稱, type屬性則是屬性的型態 -->
<form-property name="account" type="java.lang.String" >
<form-property name="username" type="java.lang.String" >
<form-property name="password" type="java.lang.String" >
</form-bean>
</form-beans>
透過以上的設定之後,在 Action 中可以如以下程式撰寫
首先須將傳入的 ActionForm 強制轉換成 DynaActionForm 型別
接著可以使用 DynaActionForm 所提供的 get 方法取得請求表單的參數值
注意一點的是使用 get 方法時取得的是 Object 型態,故須經過適當的轉型
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class LoginAction extends Action
{
private static final String SUCCESS = "success";
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{
DynaActionForm dynaForm = (DynaActionForm)form;
String account = (String)dynaForm.get("account");
request.setAttribute("account", account);
return mapping.findForward(SUCCESS);
}
}
對於動態的 DynaActionForm 而言卻是在實作上比較輕鬆
但是如果對於 Action 中需經常使用 ActionForm 的時候還是較不建議使用 DyanActionForm
因為會花很多時間在進行轉型的動作上
沒有留言:
張貼留言