<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Java技術(shù)專區(qū)--Hilly

    http://blog.duyouyou.com
       :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理
    通常情況下,我們要在ActionForm中為相應(yīng)表單定義對應(yīng)的私有屬性,再通過Getter和Setter設(shè)置和獲得表單的數(shù)據(jù)。

    但如果表單數(shù)據(jù)域比較多,那么就需要在ActionForm中為每個表單域定義一個私有屬性并定義相應(yīng)的Getter、Setter方法。

    解決方法有兩種,一種是在ActionForm中定義一個Map私有屬性,動態(tài)產(chǎn)生表單提交的數(shù)據(jù)域;另一種是使用DynaActionForm。

    這里,我想以一個例子介紹一下第一種方法。

    首先創(chuàng)建ActionForm類:TestForm
    ?1package?form;
    ?2
    ?3import?org.apache.struts.action.ActionForm;
    ?4import?java.util.HashMap;
    ?5
    ?6public?class?TestForm?extends?ActionForm?{
    ?7??private?HashMap<String,Object>?map?=?new?HashMap<String,Object>();
    ?8
    ?9??public?Object?getValue(String?key)?{
    10????return?map.get(key);
    11??}

    12
    13??public?void?setValue(String?key,Object?value)?{
    14????map.put(key,value);
    15??}

    16
    17}

    請注意第7行,這里定義了一個私有變量,該變量是一個Map類。
    第9、13行分別定義了Getter和Setter方法,這里,Getter方法需要一個參數(shù),用于傳遞表單域(即動態(tài)屬性)的名稱,Setter方法需要兩個參數(shù),分別是表單域名稱和對應(yīng)的值,這和傳統(tǒng)的ActionForm的Getter和Setter有很大分別。

    然后創(chuàng)建Action類:TestAction

    ?1package?action;
    ?2
    ?3import?org.apache.struts.action.Action;
    ?4import?org.apache.struts.action.ActionMapping;
    ?5import?org.apache.struts.action.ActionForm;
    ?6import?org.apache.struts.action.ActionForward;
    ?7import?java.util.HashMap;
    ?8import?javax.servlet.http.*;
    ?9
    10public?class?TestAction?extends?Action?{
    11??public?ActionForward?execute(ActionMapping?mapping,ActionForm?form,HttpServletRequest?request,HttpServletResponse?response)?throws?Exception?{
    12????return?mapping.findForward("success");
    13??}

    14}

    第8行,鑒于這是一個例子為了簡便起見使用了“*”代替了具體的類,編寫程序時還是需要培養(yǎng)良好的習(xí)慣引入相應(yīng)的類,避免出現(xiàn)沖突。
    這個類很簡單,只是把請求傳遞到一個在Struts中命名為“success”的forward對應(yīng)的頁面,具體請看下面列出的struts-config.xml當(dāng)中的配置。

    然后是輸入表單的JSP頁面:input.jsp

    1<%@?taglib?uri="/tags/struts-html"?prefix="html"?%>
    2
    3<html:form?action="/Test.do"?method="post">
    4???<html:text?property="value(a)"/>
    5???<html:text?property="value(b)"/>
    6???<html:submit>Submit</html:submit>
    7</html:form>


    第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<%@?taglib?uri="/tags/struts-bean"?prefix="bean"?%>
    2
    3<bean:write?name="test"?property="value(a)"/>
    4<bean:write?name="test"?property="value(b)"/>


    第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”實際上是對應(yīng)剛才輸入頁面動態(tài)產(chǎn)生的兩個表單域?qū)傩悦_@里實際是要顯示名為“test”的ActionForm的名為“value”的Map類屬性中的“key”分別為“a”和“b”的對應(yīng)的“value”。

    通過這樣的設(shè)計,我們就完成了動態(tài)產(chǎn)生表單域?qū)傩缘墓δ埽@個設(shè)計的好處是你并不需要修改ActionForm,就能隨意設(shè)計你的表單域?qū)傩裕泊蟠鬁p少了ActionForm的編碼量。

    最后,讓我們來看看struts-config.xml中的相應(yīng)配置(只列出相關(guān)配置片斷):

    ?

    ?1<struts-config>
    ?2??
    ?3??<form-beans>
    ?4????<form-bean?name="test"?type="form.TestForm"/>
    ?5??</form-beans>
    ?6??
    ?7??<action-mappings>
    ?8?????<action?name="test"?path="/Test"?type="action.TestAction">
    ?9????????<forward?name="success"?path="/pages/success.jsp"/>
    10??????</action>
    11???</action-mappings>
    12???
    13</struts-config>

    ?


    評論

    # re: [Struts]應(yīng)用Map作為ActionForm的屬性,動態(tài)增加ActionForm的“屬性” (轉(zhuǎn))  回復(fù)  更多評論   

    2007-06-29 15:08 by 蔫嘟
    Struts 很簡單也很靈活
    Hold住
    主站蜘蛛池模板: 四虎国产精品永免费| 国产麻豆剧传媒精品国产免费| 亚洲精品自产拍在线观看| 国产偷国产偷亚洲高清在线| 国产精品视频永久免费播放| 亚洲男人天堂影院| 香蕉成人免费看片视频app下载| 国产成人亚洲精品91专区手机| 直接进入免费看黄的网站| 处破痛哭A√18成年片免费| 免费A级毛片无码A∨中文字幕下载| 精品国产亚洲一区二区在线观看 | 3d成人免费动漫在线观看| 久久精品国产亚洲一区二区| 精品国产污污免费网站入口在线| 男人的天堂亚洲一区二区三区 | 三级网站在线免费观看| 国产亚洲视频在线播放| gogo免费在线观看| 亚洲免费视频一区二区三区| 羞羞漫画小舞被黄漫免费| 免费大黄网站在线观| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 国内永久免费crm系统z在线| 日日噜噜噜噜夜夜爽亚洲精品| 特黄特色大片免费| 亚洲成人影院在线观看| 男人扒开添女人下部免费视频| 亚洲国产精品一区二区第四页| 成年网站免费入口在线观看 | 黄网站色视频免费看无下截 | 亚洲成a人片在线观看日本 | 成人毛片免费观看视频大全| 亚洲中文字幕精品久久| 午夜免费不卡毛片完整版| 亚洲国产AV无码一区二区三区| 国产精品酒店视频免费看| 男男黄GAY片免费网站WWW| 亚洲v国产v天堂a无码久久| 一级美国片免费看| 亚洲欧洲国产精品香蕉网|