請注意第7行,這里定義了一個私有變量,該變量是一個Map類。第9、13行分別定義了Getter和Setter方法,這里,Getter方法需要一個參數(shù),用于傳遞表單域(即動態(tài)屬性)的名稱,Setter方法需要兩個參數(shù),分別是表單域名稱和對應(yīng)的值,這和傳統(tǒng)的ActionForm的Getter和Setter有很大分別。然后創(chuàng)建Action類:TestAction
第8行,鑒于這是一個例子為了簡便起見使用了“*”代替了具體的類,編寫程序時還是需要培養(yǎng)良好的習(xí)慣引入相應(yīng)的類,避免出現(xiàn)沖突。這個類很簡單,只是把請求傳遞到一個在Struts中命名為“success”的forward對應(yīng)的頁面,具體請看下面列出的struts-config.xml當(dāng)中的配置。然后是輸入表單的JSP頁面:input.jsp
第1行引入了Struts的html標(biāo)簽庫請注意第4、5行,如果使用傳統(tǒng)的ActionForm,property的值應(yīng)該與ActionForm里面的一個私有屬性的名稱對應(yīng),但在這里,請回憶上述ActionForm中的Getter和Setter方法,分別帶有一個參數(shù)和兩個參數(shù),這里的property會通過反射機(jī)制自動調(diào)用Setter方法,“value(a)”中的“value”就是ActionForm中Map的名稱,而括號當(dāng)中的“a”,就是我們動態(tài)產(chǎn)生的表單域的名稱,它對應(yīng)Getter方法中的第一個參數(shù)“key”,而用戶在表單輸入的值就對應(yīng)Setter方法中的第二個參數(shù)“value”。這里,我們分別動態(tài)創(chuàng)建了兩個名為“a”和“b”的表單域,存放到Map中。然后,我們看看success.jsp即Action轉(zhuǎn)發(fā)到的頁面
第1行引入了Struts的bean標(biāo)簽庫。請注意第2行,引用了名為“test”的ActionForm(詳細(xì)設(shè)置請看struts-config.xml)。這標(biāo)簽的作用是顯示輸出ActionForm的指定屬性值。請注意property,“value”就是ActionForm中Map的名稱,它通過反射機(jī)制自動調(diào)用ActionForm的Getter方法,請回憶上述ActionForm中的Getter方法,帶有一個參數(shù)“key”,這里的“a”,“b”實(shí)際上是對應(yīng)剛才輸入頁面動態(tài)產(chǎn)生的兩個表單域?qū)傩悦_@里實(shí)際是要顯示名為“test”的ActionForm的名為“value”的Map類屬性中的“key”分別為“a”和“b”的對應(yīng)的“value”。通過這樣的設(shè)計(jì),我們就完成了動態(tài)產(chǎn)生表單域?qū)傩缘墓δ埽@個設(shè)計(jì)的好處是你并不需要修改ActionForm,就能隨意設(shè)計(jì)你的表單域?qū)傩裕泊蟠鬁p少了ActionForm的編碼量。最后,讓我們來看看struts-config.xml中的相應(yīng)配置(只列出相關(guān)配置片斷):
?
Powered by: BlogJava Copyright © duyouyou.com
本博客已經(jīng)不再維護(hù),請不要回復(fù)。有需要的,請移步我的獨(dú)立博客:http://blog.duyouyou.com/