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

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

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

    Hopes

    Start Here..

     

    使用xloadtree讀取數據庫動態構造樹

     

    使用xloadtree讀取數據庫動態構造樹

    分類: struts2008-11-01 00:19 1803人閱讀 評論(4) 收藏 舉報

    原先系統使用xtree讀取數據庫構造的樹,是jsp一次性生成所有的節點的,因為數據量也不大,所以用用還挺好。今天特來興致,決定改造。當點擊父節點的時候,才去數據庫動態的獲取子節點,這樣對于大數據量的系統,性能比較好。

    首先下載 http://webfx.eae.net/dhtml/xtree2b/xtree2b-20050606.zip

    這包里面有簡單的示例,廢話少說,動手

    1. <link type="text/css" rel="stylesheet" href="<%=request.getContextPath() %>/css/xtree2.css">
    2. <link type="text/css" rel="stylesheet" href="<%=request.getContextPath() %>/css/xtree2.links.css">
    3. <script type="text/javascript" src="<%=request.getContextPath() %>/script/xtree2.js"></script>
    4. <script type="text/javascript" src="<%=request.getContextPath() %>/script/xloadtree2.js"></script>

    首先構造樹的jsp文件要加載相關js和css文件,上面down的zip里面都有,放到你的項目里面

    jsp端加入腳本,構造樹

    1. <div style="left:20px;top:30px;width:100%;">
    2. <script>
    3.     var tree = new WebFXTree('root node');
    4.     tree.add(new WebFXLoadTreeItem("all node", "/cmsCatalogQueryAction.do?method=tree","javascript:modifyNode('cmsCatalogMaintAction.do?method=new')"));
    5.     tree.showRootNode = false;
    6.     tree.showRootLines = false;
    7.     tree.write();
    8. </script>

    /cmsCatalogQueryAction.do?method=tree是生成相關xml的action地址

    javascript:modifyNode('cmsCatalogMaintAction.do?method=new')這個是點擊根節點的時候action的地址,比如鏈接到添加一級節點的頁面,(modifyNode是我項目里面用的js函數,目的是在右邊的frame里面打開后面的參數地址)

        tree.showRootNode = false;
        tree.showRootLines = false;
    為了把all node作為根節點,所以隱藏root node節點

     

    下面看看action端的寫法

    1. public ActionForward tree(
    2.             ActionMapping actionMapping,
    3.             ActionForm actionForm,
    4.             HttpServletRequest request,
    5.             HttpServletResponse response)
    6.             throws Exception {
    7.             response.setContentType("text/xml; charset=gbk");
    8.             response.setHeader("Cache-Control", "no-cache");
    9.             response.setDateHeader("Expires", 0);
    10.             PrintWriter out = response.getWriter();
    11.             String id = request.getParameter("id");
    12.             Document doc = new Document(new Element("tree"));
    13.             if (StringUtils.isEmpty(id)) {
    14.                 List list = getCmsFacade().getRootCatalogListByDomainID(HConstant.currentDomain.getId());
    15.                 transfer(doc, list);
    16.            } else {
    17.                 List list = getCmsFacade().getCmsCatalogListByParentID(id);
    18.                 transfer(doc, list);
    19.            }
    20.             Format format = Format.getCompactFormat();
    21.             format.setEncoding("gbk");
    22.             format.setIndent("/t");
    23.             XMLOutputter xout = new XMLOutputter(format);
    24.             xout.output(doc, out);
    25.             out.flush();
    26.             out.close();
    27.             return null;
    28.         } // end tree
    29. private void transfer(Document doc, List r) {
    30.         for (Iterator it = r.iterator(); it.hasNext();) {
    31.          CmsCatalog one = (CmsCatalog) it.next();
    32.          Element tree = doc.getRootElement();
    33.          Element inner = new Element("tree").setAttribute("text", one.getZhCaption());
    34.          tree.addContent(inner);
    35.          inner.setAttribute("src", "/cmsCatalogQueryAction.do?method=tree&id="+ one.getId());
    36.          inner.setAttribute("action", "javascript:refun('"+one.getId()+"','"+one.getZhCaption()+"')");
    37.          }
    38.        }

    這邊的代碼要根據你的業務來寫了,我的欄目對象叫CmsCatalog。生成xml使用了jdom,代碼中的Document 和Element這些class都是這個包里面的

    getCmsFacade().getRootCatalogListByDomainID是獲取本站點的所有一級欄目,

    getCmsFacade().getCmsCatalogListByParentID是根據父ID得到下一級欄目列表,(不是得到所有的子,只獲取直接下級的子)

     

    獲取到欄目list后,要轉換成對應xml規范,參看transfer方法,轉后的數據格式如下,以根節點為例

    1. <?xml version="1.0" encoding="gbk" ?> 
    2. - <tree> 
    3. <tree text="關于我們" src="/cmsCatalogQueryAction.do?method=tree&id=4028e44919c7e5290119c7e754330001" action="javascript:refun('4028e44919c7e5290119c7e754330001','關于我們')" /> 
    4. <tree text="新聞頻道" src="/cmsCatalogQueryAction.do?method=tree&id=4028e4491a04a4fb011a04ab42ae005e" action="javascript:refun('4028e4491a04a4fb011a04ab42ae005e','新聞頻道')" /> 
    5. <tree text="產品與解決方案" src="/cmsCatalogQueryAction.do?method=tree&id=4028e4491a80ec5b011a811c1b570002" action="javascript:refun('4028e4491a80ec5b011a811c1b570002','產品與解決方案')" /> 
    6. <tree text="服務與支持" src="/cmsCatalogQueryAction.do?method=tree&id=4028e4491a900271011a9042bb810003" action="javascript:refun('4028e4491a900271011a9042bb810003','服務與支持')" /> 
    7. <tree text="英才導航" src="/cmsCatalogQueryAction.do?method=tree&id=4028e4491a33c105011a33d2f5b90002" action="javascript:refun('4028e4491a33c105011a33d2f5b90002','英才導航')" /> 
    8. <tree text="聯系我們" src="/cmsCatalogQueryAction.do?method=tree&id=4028e4491a805657011a80d2cae90006" action="javascript:refun('4028e4491a805657011a80d2cae90006','聯系我們')" /> 
    9. </tree>

    當點擊一個節點的時候,會執行refun這個js函數,為什么不直接寫一個鏈接呢? 因為一個欄目樹可能在很多地方都要用到,點擊樹的鏈接也因此可能不一樣了,所以不能在action寫死具體地址。構造樹的jsp頁面直接寫一個refun函數就ok了,自己去定義點擊節點時候的操作。服務端返回了兩個欄目參數給refun函數,一個是id,一個中文名稱

     

    當點擊最后一級節點的時候,會提示加載節點錯誤的信息,這個是xloadtree的一個bug,我們手動修改下就ok了,編輯xloadtree2.js文件,找到
    if (count == 0) {
                jsNode.errorText = "Error loading " + jsNode.src + " (???)";
            }

    修改為
    if (count == 0) {
                            jsNode.remove(jsNode._loadingItem);
                            t.setSuspendRedraw(false);
                            jsNode.update();
                            return;
      }
    當返回的xml 為空的時候,把節點設置為無子節點

     

    到此,動態加載樹就完成了,相當簡單吧,你唯一要做的就是合理的把你的欄目列表從數據庫取出來,然后正確的填充到xml里面,就ok了

    posted on 2012-08-12 21:39 ** 閱讀(1065) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    收藏夾

    C#學習

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产美女被遭强高潮免费网站| 亚洲精品成人在线| 毛片免费视频观看| 亚洲人成电影网站免费| 免费欧洲美女牲交视频| 免费久久人人爽人人爽av| 亚洲精品国产国语| 亚洲人成网站色在线入口| 久久精品无码专区免费东京热| 亚洲AV无码一区二区一二区| 国产亚洲精品自在久久| 精品久久久久国产免费| 中文字幕成人免费高清在线视频| 亚洲成a人不卡在线观看| 亚洲午夜精品一级在线播放放| 亚洲一区二区免费视频| 人妻巨大乳hd免费看| 亚洲人成高清在线播放| 国产亚洲精品AA片在线观看不加载| 国产成人免费高清激情明星| 一级一黄在线观看视频免费| 亚洲一卡2卡4卡5卡6卡残暴在线| 久久国产精品成人片免费| 亚洲成在人线aⅴ免费毛片| 亚洲国产精品第一区二区| 亚洲第一网站男人都懂| 国产免费人成视频在线播放播| 国产成人精品日本亚洲专一区| 亚洲日产韩国一二三四区| 国产在线ts人妖免费视频| 成人在线免费看片| 理论亚洲区美一区二区三区| 久久精品国产亚洲av高清漫画| 国产美女在线精品免费观看| a级毛片视频免费观看| 亚洲熟妇色自偷自拍另类| 高清国语自产拍免费视频国产| 性色午夜视频免费男人的天堂 | 国产又大又粗又硬又长免费| 37pao成人国产永久免费视频| 9i9精品国产免费久久|