2011年1月25日 星期二

Struts 教學 - DynaActionForm

在頁面中如果有過多的 Action 處理可能會導致需要大量的 ActionForm

而透過 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

因為會花很多時間在進行轉型的動作上

沒有留言:

張貼留言