Struts Gossip: 使用 DynaActionForm

一個網站中會有許多的表單以供使用者填寫資料,越大型的網站越需要更多的 ActionForm 物件來應付表單的取值,對於一些表單來說,ActionForm只是單純的設值、取值行為,如果為每一個表單撰寫一個ActionForm,那麼會是一件單純重複且無趣的行為,而且在維護上會更加困難。

對於一些單純的表單來說,您可以使用DynaActionForm類別,您只要在struct-config.xml中設定好相關的設定,就可以自動生成 ActionForm物件,這麼一來您可以集中在struct-config.xml中管理表單物件,也可以省去不是編碼與編譯的工夫。

下面是使用DynaActionForm的一個例子:


struts-config.xml
.... <form-beans> <form-bean name="userForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="name" type="java.lang.String" initial="nobody"/> <form-property name="password" type="java.lang.String" initial="nopass"/> </form-bean> </form-beans> <action-mappings> <action path="/LoginAction" type="onlyfun.caterpillar.LoginAction" name="userForm"> <forward name="helloUser" path="/WEB-INF/pages/hello.jsp"/> .... </action> </action-mappings> ....

注意在<form-bean>的type屬性,設定使用 org.apache.struts.action.DynaActionForm,而Form的屬性則使用<form-property> 標籤來設定,DymaActionForm的type屬性希望得到的一個Java類別名稱,所以對於基本資料型態如int,必須以 java.lang.Integer作為Wrapper類別包裝。

ActionForm類別的reset()方法預設什麼事都不作,除非您重新定義它,DynaActionForm則預設會將所有的資料重設為Java型態的預設值,例如數字重設為0,而Object則重設為null,您也可以使用initial屬性來設定重設的值。

DynaActionForm同樣也被當作參數傳遞給execute()方法,DynaActionForm使用Map型態的方法來取值,下面的 Action類別示範了如何取得DynaActionForm的屬性值:


LoginAction.java
package onlyfun.caterpillar; import javax.servlet.http.*; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { DynaActionForm dynaForm = (DynaActionForm) form; String name = (String) dynaForm.get("name"); String password = (String) dynaForm.get("password"); .... } }

DynaActionForm預設並沒有為validate()方法提供任何行為,如果需要的話,您可以透過繼承DynaActionForm來定義 validate()方法,並於<form-bean>的type中設定為您所撰寫的類別。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值