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

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

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

    張昊

    J-Hi(http://www.j-hi.net)

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      45 Posts :: 1 Stories :: 110 Comments :: 0 Trackbacks

    目的 通過配置文件himenu-config.xml動(dòng)態(tài)裝配樹型結(jié)構(gòu),要求不對(duì)V端(JSPJavascript)不做任何修改,樹的深度深度包括兩層含義1組件與組件之間的關(guān)聯(lián)層次的深度2樹本身的層次的深層不做任何限制,動(dòng)態(tài)動(dòng)態(tài)也包括兩層含義1樹本身的數(shù)據(jù)是動(dòng)態(tài)的均應(yīng)從數(shù)據(jù)庫中調(diào)用2動(dòng)態(tài)加載即只有點(diǎn)擊當(dāng)前層的節(jié)點(diǎn)時(shí)才去加載當(dāng)前層的下一層數(shù)據(jù)構(gòu)建,多語言的支持要求可配置從數(shù)據(jù)庫取出的數(shù)據(jù)可以是直接顯示的也可是資源文件中的鍵值以支持多語言。最終的目的就是通過配置而不用寫任何代碼來實(shí)現(xiàn)樹型結(jié)構(gòu)的自動(dòng)渲染。

    資源 參考資源1.struts-menu 2.Xtree 3.XLoadTree 4.XMLDcoder

    規(guī)則 一個(gè)組件只能有0-1個(gè)父組件,一組件只能有0-2個(gè)子組,也可自描述即,一個(gè)組件可以是它自已的父組件

    原理 當(dāng)調(diào)用action時(shí)要帶入至少一個(gè)參數(shù)如下面這樣的一個(gè)URL 有兩個(gè)參數(shù)menuName為配置文件中菜單的名稱type為重定向的位向返回的字符串,其中nenuName參數(shù)是必須填寫的,具體配置參見/WEB-INF/config/hi.xml配置文檔tree.action

    ?menuName=menuName(himenu-config.xml)&type=nextforwardName通過配置。           WebDynamicTreeManager treemgr=new WebDynamicTreeManager(); //創(chuàng)建動(dòng)態(tài)樹管理器

    request.setAttribute("com.hi.tree.menu",treemgr.getMenu(request.getParameter("menuName"),parMap,contain)); //treemgr.getMenu()方法得到動(dòng)態(tài)樹的HiMenuComponet對(duì)象 ; treemgr. getLoadMenu()方法為動(dòng)態(tài)加載的HiMenuComponet對(duì)象注意該方法只構(gòu)建一層HiMenuComponet對(duì)象,每次都是動(dòng)態(tài)加載下一層數(shù)據(jù)。返回的JSP頁面主要的代碼為

    <menu:useMenuDisplayer name="Velocity" config="/templates/xtree.html"  //指定要處理當(dāng)前模板的顯示類bundle="org.apache.struts.action.MESSAGE">

    if (document.getElementById) {

    <hi:displayMenu name="com.hi.tree.menu"/>   //HiMenuComponet對(duì)象按顯示類對(duì)象的約束畫出來

    內(nèi)部運(yùn)行機(jī)制參見API

    菜單配置

    keymap

    用于存儲(chǔ)父子關(guān)系的值(注:該屬性只對(duì)動(dòng)態(tài)樹有效)

    parent

    當(dāng)前菜單作為父菜單的POJO屬性名

    child

    當(dāng)前菜單作為子菜單的POJO屬性名

    childValue

    查詢子菜單時(shí)初始缺省值

    menuName

    菜單名稱與key值應(yīng)保持一致

    beanName

    對(duì)應(yīng)數(shù)據(jù)庫對(duì)象的javaBean類的全限定名

    submenuName

    當(dāng)前菜單所有的子菜單名稱,最多只能包含兩個(gè)子菜單,以逗號(hào)分隔

    title

    作為樹根顯示的文字

    titleField

    各節(jié)點(diǎn)顯示文字的字段名

    needShow

    是否顯示,可以作為激活條件

    sort

    當(dāng)前層上所有節(jié)點(diǎn)的排列順序,對(duì)應(yīng)數(shù)據(jù)庫對(duì)象中的字段名

    action

    當(dāng)前節(jié)點(diǎn)的動(dòng)作,分3種策略

    {js}

    標(biāo)記執(zhí)行javascript代碼

    {url}

    標(biāo)記鏈接動(dòng)作

    {property}

    .對(duì)存儲(chǔ)于數(shù)據(jù)庫中字段的值的讀取;數(shù)據(jù)庫中可以存儲(chǔ)鏈接{url}XXX{js}XXXX等,可以再次解析執(zhí)行

    javascript

    定義通過{js}指定的要執(zhí)行的js函數(shù)

    bundle

    如果標(biāo)題顯示要支持多語言,要加上對(duì)應(yīng)的資源文件的路徑與文件名

    target

    如果有多個(gè)frame可以指定action功能后的目標(biāo)

    checkbox

    如果需要顯示復(fù)選框就為true

    iconmap

    如果節(jié)點(diǎn)右側(cè)還要求多加幾個(gè)圖標(biāo)及與圖標(biāo)對(duì)應(yīng)的action

    leafMethod

    在使用延時(shí)加載樹時(shí)要配置,注意只有在動(dòng)態(tài)樹中配置才有效,且該屬性的值應(yīng)是對(duì)應(yīng)POJO下的一個(gè)無參方法并且返回類型與boolean

    cache

    樹所描述的數(shù)據(jù)庫是否加入緩存,注意加入緩沖區(qū)的數(shù)據(jù)將不會(huì)因數(shù)據(jù)的更新而更新,注意只有在靜態(tài)樹中配置有效

    filter

    對(duì)菜單樹的數(shù)據(jù)進(jìn)行過濾,提供兩種接口方式對(duì)數(shù)據(jù)進(jìn)行過濾

    MenuFilterProcessor 在獲取數(shù)據(jù)之前填加過濾器

    MenuCollectionProcessor 在獲取數(shù)據(jù)之后再對(duì)數(shù)據(jù)做整理

    動(dòng)態(tài)數(shù)據(jù)參數(shù)通過url傳遞:tree.action**&id=2

    動(dòng)態(tài)樹訪問配置

    loadTree.action?menuName=agentTree

    靜態(tài)加載的url配置

    tree.action?menuName=agentTree

    提示:所有的配置信息必須寫在WEB-INF/config/himenu-config.xml文件中。該文件實(shí)際上是在描述一個(gè)HashMap,每個(gè)key對(duì)應(yīng)的都是一個(gè)菜單名、value對(duì)應(yīng)著 com.hi.tools.tree.WebDynamicMenuDefine類的實(shí)例,該類只是一個(gè)簡單的javaBean,裝載對(duì)菜單樹的配置信息

    注意其中agentTree是在/WEB-INF/config/himenu-config.xml 配置的樹配置

    [#id]

    其中的idbean的屬性名用“[# ]”封起來表示取其相應(yīng)的值






    1.執(zhí)行javascript:使用{js}來標(biāo)記實(shí)例代碼:<void property="action">

         <string>{js}backAgent([#id],"'[#orgName]"');</string> //[#id]動(dòng)態(tài)取出bean屬性為id的值,

    // backAgent是在點(diǎn)擊樹形鏈接要執(zhí)行的js函數(shù)名

    </void>

    javascript定義通過{js}指定的要執(zhí)行的js函數(shù)

        <void property="javascript">

         <string>

            function backAgent (id,orgName){

                  opener.document.getElementById('agent.parentOrgName').value=orgName;

                  opener.document.getElementById('agent.id').value=id;

                  window.close();

               }

         </string>

        </void>

    2.鏈接:<void property="action">

         <string>{url}test.action?id=[#id]&amp;name=[#name]</string>

    //在點(diǎn)擊樹形鏈接時(shí)會(huì)請(qǐng)求test.action并且動(dòng)態(tài)帶回idname的值

    3.對(duì)存儲(chǔ)于數(shù)據(jù)庫中字段的值的讀取<void property="action"><string>{property}link

    </string> //link是數(shù)據(jù)庫字段名非bean屬性,即POJO的類名

    iconmap 如果節(jié)點(diǎn)右側(cè)還要求多加幾個(gè)圖標(biāo)及與圖標(biāo)對(duì)應(yīng)的action

                         <string>images/openfoldericon.png</string>

           <string>commonEditAction.hi?bo=HiUser&amp;recodeNum=[#himenuitemid]</string>

    <void property="leafMethod">

        <string>getLeaf</string>//getLeafpojo類中檢查但前節(jié)點(diǎn)是不是頁節(jié)點(diǎn)的方法名主要用于動(dòng)態(tài)數(shù)

        </void>

    <void property="cache">

         <boolean>true</boolean>

    </void>

    <void property="filter">

    <string>demo.tree.AuthUserGroupCollProcessor</string>

     </void>

    代碼文件    /WEB-INF/menu-config.xml struts-menu本身的配置文件

    /WEB-INF/config/himenu-config.xml    所有樹的配置文件

                         com.hi.tools.tree.WebDynamicMenuDefine.java 與配置文件中單個(gè)菜單對(duì)應(yīng)的javaBean

    com.hi.tools.tree. HiMenuComponent.java   樹組件文件

                         com.hi.tools.tree. WebDynamicTreeManager.java 動(dòng)態(tài)加載樹組件

    /common/commonTree.jsp 通用樹顯示頁面

    /common/commonLoadTree.jsp 通用動(dòng)態(tài)加載樹顯示頁面

    /common/subMenu.jsp 當(dāng)動(dòng)態(tài)加載樹點(diǎn)擊某節(jié)點(diǎn)時(shí)調(diào)用的JSP文件,該文件最終組成一個(gè)XLoadTree支持的xml文件

    /templates/xtree.html 顯示樹的模板文件

    /templates/xloadtree.html 顯示動(dòng)態(tài)加載樹的模板文件

    /templates/xloadsub.html 當(dāng)動(dòng)態(tài)加載樹點(diǎn)擊某節(jié)點(diǎn)時(shí)的模板文件  ;模板文件均由JSP文件中的標(biāo)簽調(diào)用

    /scripts/xtree.js; /scripts/xloadtree.js; /scripts/xmextras.js 均為將數(shù)據(jù)轉(zhuǎn)換為html字符打印并顯示出來

    配置文檔詳解

    <void method="put">

       <string>agentTree</string>

       <object class="org.hi.base.menu.strutsmenu.WebDynamicMenuDefine"><!--配置樹對(duì)應(yīng)的類實(shí)例 -->

        <void property="keymap"><!--配置父子關(guān)系-->

         <object class="java.util.HashMap"> s

          <void method="put">

           <string>id</string>

           <string>parentOrg</string>

          </void><!--idparentOrgbeanName對(duì)應(yīng)的bean的屬性名-->

         </object>

        </void>

       <void property="parent">

         <string>id</string>

        </void>

        <void property="child">

         <string>parentOrg</string>

        </void><!--parentchild指定父子關(guān)系-->

        <void property="childValue">

         <string>0</string>

        </void>

        <void property="menuName"><!--配置樹名-->

         <string>agentTree</string>

        </void>

       <void property="beanName"><!--配置要形成樹的bean -->

         <string>com.cltc.maotai.agent.model.Agent</string>

        </void>

        <void property="submenuName"><!--擴(kuò)展節(jié)點(diǎn)的數(shù)名-->

         <string>agentTree</string>

        </void>

        <void property="title">

         <string>代理</string><!--跟節(jié)點(diǎn)的名稱-->

        </void>

        <void property="titleField">

         <string>orgName</string><!--顯示文字的字段名-->

        </void>

        <void property="needShow">

         <boolean>true</boolean><!--是否顯示-->

        </void>

        <void property="cache"><!--定義在靜態(tài)樹的中是否使用緩存-->

         <boolean>true</boolean>

        </void>

        <void property="javascript"><!--定義{js}標(biāo)記的要執(zhí)行的js函數(shù)-->

         <string>

             function backAgent(id,orgName){

                    opener.document.getElementById('agent.parentOrgName').value=orgName;

                    opener.document.getElementById('agent.parentOrg.id').value=id;

                    window.close();

                }

         </string>

        </void>

         <void property="iconmap"><!--樹的節(jié)點(diǎn)鏈接后面使用圖標(biāo)-->

         <object class="java.util.HashMap">

          <void method="put">

           <string>images/b2xwhite.gif</string>

           <string>{js}backAgent([#id],"'[#orgName]"');</string>

          </void><!--如果函數(shù)中的參數(shù)是字符串必須寫成"'[#orgName]"'這樣的格式orgNamebean屬性名,注意在方法參數(shù)中如果是字符串則要通過"’做轉(zhuǎn)義,并且只能用單引號(hào) -->

         </object>

        </void>

         <void property="action"><!--菜單節(jié)點(diǎn)上所要執(zhí)行的動(dòng)作可以是URL也可是js的方法-->

         <string>{url}agentEdit.action?id=[#id]</string>

        </void>   

     <void property="checkbox"><!--定義是否在樹中使用復(fù)選框,頁面配套調(diào)用函數(shù)selectedcb() -->

        <boolean>true</boolean>

        </void>

       <void property="leafMethod">

        <string>getLeaf</string>

        </void><!--配置動(dòng)態(tài)樹中檢驗(yàn)是不是頁節(jié)點(diǎn)的函數(shù),此函數(shù)定義在beanName指定的bean中,目的是檢測該節(jié)點(diǎn)還有沒有子結(jié)點(diǎn)-->

       </object>

    </void>

    posted on 2011-03-29 00:00 張昊 閱讀(1842) 評(píng)論(1)  編輯  收藏

    Feedback

    # re: J-Hi無編碼(通過配置文件)菜單樹型結(jié)構(gòu)的應(yīng)用與實(shí)現(xiàn) 2011-06-17 11:19 龍歌
    我太笨了? 看不懂  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 美丽的姑娘免费观看在线播放| 男女一边桶一边摸一边脱视频免费| 亚洲人成色在线观看| 学生妹亚洲一区二区| 国产在亚洲线视频观看| a级毛片免费网站| 久久青草精品38国产免费| 久久精品国产免费观看三人同眠| 免费大片黄在线观看yw| 日韩在线免费电影| 国产亚洲精品免费视频播放| 亚洲av激情无码专区在线播放| 亚洲久悠悠色悠在线播放| 美女视频黄a视频全免费网站色| 13小箩利洗澡无码视频网站免费| 亚洲大片免费观看| 国产精品免费看久久久久| 亚洲情XO亚洲色XO无码| 亚洲日韩乱码中文无码蜜桃臀| 亚洲精品精华液一区二区| a免费毛片在线播放| 91精品国产免费入口| 免费无码又爽又刺激高潮| 亚洲人成人一区二区三区| 亚洲一级毛片视频| 无码 免费 国产在线观看91| 免费国产黄网站在线观看| 在线观看免费国产视频| 亚洲va无码专区国产乱码| 亚洲久热无码av中文字幕| 免费无码又爽又刺激网站| 人妻视频一区二区三区免费| 亚洲中文字幕在线第六区| 国产精品亚洲片在线va| 国产精品99爱免费视频| 成年性羞羞视频免费观看无限| 国产国拍亚洲精品mv在线观看| 亚洲七久久之综合七久久| 久久精品电影免费动漫| 四虎影视在线永久免费看黄| 亚洲综合激情九月婷婷|