struts框架——ActionForm+DynaActionForm

ActionForm

Actionform的作用:
表單字段收集器
如果ActionForm中的屬性和表單中的參數不一致,則只收集和表單名字相同的屬性
作爲類型轉換器
作爲傳輸對象

語法要求:
必須擴展自org. apache . struts . action . ActionForm
如果要獲取表單的值,必須定義相應的私有屬性
如果要求在ActionForm傳遞到Action之前進行校驗,必須實現validate方法
如果想要在組裝前初始化屬性,必須實現reset方法

注意:
不是pojo類,繼承了ActionForm,依賴於struts框架
不能作爲結果bean,只能收集表單參數
如果要傳遞到業務層,只能把它放到pojo對象進行傳遞

DynaActionForm

執行流程:
1、先在struts.xml文件 中添加配置信息(以表單發送用戶名密碼爲例)

form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm">
			<form-property name="username" type="java.lang.String"/>
			<form-property name="age" type="java.lang.Integer"/>
		</form-bean>

2、啓動服務器,加載配置文件web.xml。文件讀取到內存,讀取< servlet>標籤創建出中央控制器ActionServlet
執行init ()方法進行初始化。

3、創建fromBean存放FromBeanConfig對象

4、將主配文件struts-config.xml 讀取到內存

5、創建一個ModuleConfigImpl對象[ 實現ModuleConfig接口]

ModuleConfig 管理actionConfigs和formBeans兩個Map集合:
◆把每個請求對應的配置信息< action-mappings>封裝到ActionMapping,把多個ActionMapping放在actionConfigs Map中
◆把每個請求對應的配置信息< form-beans>封裝到FormBeanConfig, 把多個FormBeanConfig放在FormBeanConfig Map中
formBeans: key = “loginForm”, value = FormBeanConfig 對象
FormBeanConfig : string name = “loginForm”, string type = “DynaActionForm”

6、通過name="dynaForm"找到formbean type= org. apache. struts .action.DynaActionForm”創建DynaActi onForm對象

一創建DynaActionForm 對象就通過創建出FormpropertyConf ig對象和fromProperties集合(map)

7、調用processPopulate()方法收集表單數據,將數據收集到dynaValues集合(map) 中
usename
◆通過參數名usename到 DynaActionForm 中找key爲username的FromBeanConfig 對象
◆通過FromBeanConfig 對象找到type 爲string
◆將表單中參數名和參數值封裝到dynaValues下 key三"username", value = "tom”
age
◆通過參數名age到DynaActionForm中找key爲age的FromBeanConfig對象
◆通過FromBeanConfig對象找到type爲Integer
◆到靜態Map集合中找類型轉化器,將字符串“21”轉換爲整型21
◆將表單中參數名和參數值封裝到dynaValues下 key="age”, value=21

8、調用processPopulate(request, response, form, mapping), 將表單參數收集到表單bean (收集到DynaActionForm 中的map中)

9、調用processActionCreate(request, response, mapping), 創建action對象

10、執行validation()方法,把DynaActionForm、action、 mapping. request、 response 傳過來

從dynaValues集合中獲得屬性

public objectget(Stringname){
object value = this . dynaValues . get(name);//以dynaValues 集合中取出了key 爲age 的value
if(value !=nul1){
return value;
}else{
......
}

11、拿到username與age 後,傳到名字爲success的forward標籤對應的視圖組件

${ dynaForm. map. username }

12、通過dynaForm 屬性名拿到dynaActionForm對象
13、通過dynaActionForm. getMap()拿到dynaValues map集合
14、調用dynaValues . get(“username”);輸出username 屬性值

優點: 代碼量大大減少
缺點:
表單中的數據傳遞給業務層較爲麻煩。不能用setParameter方法。
所有屬性和類型在配置文件中設定,編譯的時候不會驗證,如果配置錯了,產生錯誤結果較爲難找。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章