ActionForm
ActionForm 表示 HTTP窗體中的數據,可以將其看作是模型和視圖的中介,它負責保存視圖中的數據供模型或者視圖使用。ActionForm還具有的過濾保護的作用,只有通過ActionForm 驗證的數據才能夠發送到 Action 處理。
ActionForm Bean從應用和配置的角度分為兩類:動態ActionForm和靜態ActionForm和LazyForm。作用一樣,只是實現不一樣。
一.靜態Form
由程序員手工編寫Form
1.ActionForm
提交表單的字段名和form中的屬性名一致。
2.ValidatorForm
用于驗證框架的Form,在請求參數前,先使用驗證框架驗證。
在struts-config中對應的action標簽的validate值為true。
3.ValidatorActionForm
二.動態ActionForm
通過配置文件完成ActionForm配置
1.DynaActionForm
Java代碼
2.DynaValidatorForm
和ValidatorForm一樣在使用驗證框架時使用。配置和DynaActionForm類似。
type="org.apache.struts.validator.DynaValidatorForm"
3.DynaValidatorActionForm
ValidatorActionForm和DynaValidatorActionForm也都是在使用驗證框架時使用,和DynaValidatorForm及ValidatorForm不同的是,在配置validtion.xml中<formname=path> name使用的是action的path屬性值。以此來區分不同請求的驗證規則。
三.還有一種特殊的Form:LazyValidatorForm。
<form-beanname="loginForm"type="org.apache.struts.validator.LazyValidatorForm"></form-bean>
我們沒有配置form的屬性。所以在jsp頁面中必須使用struts標簽。
Jsp代碼
這樣就可以直接進行驗證框架和action中的取值。
Java代碼
四、ActionForm賦值原理
我們如果知道了Struts的流程,那么理解起ActionForm的賦值過程來就簡單了很多,大家都知道,點擊提交后,會先初始化ActionServlet類,當接收到請求時,會調用service對象檢查HTTP請求類型,通過doGet()或doPost()方法調用process()方法。在ActionServlet中會調用RequestProcessor的process()方法進行處理,該方法負責創建ActionForm對象,創建成功之后,首先執行ActionForm中的reset()方法進行重置,然后得到表單中所有輸入域的name名稱,再調用request.getParameterValues(),根據name名稱得到相應的值,最后將表單中的數據全部放到map中,map的key為表單輸入域的名稱,map的value為表單輸入域的值,接下來調用一個第三方組件BeanUtils,將Map中的值,根據ActionForm中的類型先轉換好,再調用ActionForm中的setter方法設置到ActionForm上。
reset()方法:
賦值流程:
簡單順序:先調用構造方法(判斷是否存在)――reset(重置)――setter(設定值)
五、總結
ActionForm是在Struts1中存在的一個常用類,ActionForm幫助我們實現了自動設置數據,使得程序員的使用變得簡單,不用關心賦值之類的事情而專注于業務。Struts2出現后,不用人們手動寫ActionForm了,但是這種思想我們需要了解。