處理外部輸入的利器——ActionForm
ActionForm實質上是一個JavaBean,主要用於在視圖層和控制層之間傳遞HTML表單資料。控制層可以從ActionForm Bean中讀取使用者輸入的表單資料,也可以把來自模型層的資料存放到ActionForm Bean,返回給視圖。起到資料橋樑的作用。
Struts程式中,要獲得表單資料可以使用ActionForm的子類,自訂的ActionForm需滿足以下條件:
1. 繼承org.apache.struts.action.ActionForm類;
2. 對HTTP請求的每個HTML輸入控制項都要定義對應的公用屬性;
3. 該頁面中提交資料的表單元素的名稱必須和子類的成員變數名保持一致;
4. 如果要對傳遞給控制器的資料進行校正,必須在子類中重寫validate()方法;
5. 如果想在填充ActionForm之前對某些屬性進行初始化,則必須實現reset()方法;
ActionForm有request和session兩種範圍。如果設定為request,則ActionForm執行個體將儲存在request對象中,像其他儲存在request中的屬性一樣,僅在當前請求範圍內有效;如果設定為session,則ActionForm的執行個體儲存在session對象中,此ActionForm執行個體在整個HTTP會話中有效。
根據範圍的不同,Struts架構把ActionForm的執行個體儲存在request或session對象中,因此可以像取出任何存放在request或session中的屬性一樣取出ActionForm執行個體。
動態ActionForm
每個ActionForm都是JavaBean,每個表單產生對應的ActionForm,這樣可能造成有許多的ActionForm的情況。Struts1.1改進,引入的動態ActionForm概念。通過Struts架構中的DynaActionForm類及其子類可以實現動態ActionForm,允許通過Struts的設定檔完成ActionForm的全部配置,不必要在應用程式中建立具體的ActionForm類。
動態ActionForm的具體配置方法:在Struts設定檔的<form-beans>中添加一個<form-bean>元素,type屬性設定成DynaActionForm或它的某個子類的全名。下例建立一個動態ActionForm名為loginForm,它包含兩個執行個體變數:username和password:
<form-beans> <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-peroperty name="userID" type="java.lang.String"/> <form-peroperty name="userPwd" type="java.lang.String"/> </form-bean> </form-beans> |