成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java實(shí)現(xiàn)構(gòu)造無(wú)限層級(jí)樹形菜單

seasonley / 699人閱讀

摘要:繼續(xù)填上篇文章的坑,這里來(lái)講一下后臺(tái)如何構(gòu)造多叉樹,這樣前臺(tái)就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。

繼續(xù)填上篇文章的坑,這里來(lái)講一下后臺(tái)java如何構(gòu)造多叉樹,這樣前臺(tái)就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。

我們來(lái)理一下如何實(shí)現(xiàn)構(gòu)造多叉樹的邏輯吧,其實(shí)整個(gè)問(wèn)題概括起來(lái)就是
1、構(gòu)造一個(gè)實(shí)體類,用來(lái)存儲(chǔ)節(jié)點(diǎn),所以我們構(gòu)造的需要四個(gè)對(duì)象(id,pid,name,和chirenList)
2、構(gòu)造菜單結(jié)構(gòu)
3、構(gòu)造子菜單,如此循環(huán),通過(guò)pid判斷上級(jí)菜單

具體實(shí)現(xiàn):
1、這里構(gòu)造Tree.java實(shí)體類

package com.tcl.jr.crm.entity;

/**
 * 類名稱:Tree
 * 類描述:樹形結(jié)構(gòu)
 */
public class Tree {

    private String id;
    private String pId;
    private String name;
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getpId() {
        return pId;
    }

    public void setpId(String pId) {
        this.pId = pId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Tree [id=" + id + ", pId=" + pId + ", name=" + name + "]";
    }

}

2、封裝樹形結(jié)構(gòu)類,這里我封裝成一個(gè)通用的工具類,方便項(xiàng)目中使用,MenuTreeUtil.java,完整代碼如下,可直接復(fù)制使用:

package com.tcl.jr.crm.util;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.tcl.jr.crm.entity.Tree;

/**
 * 類名稱:MenuTreeUtil
 * 類描述:遞歸構(gòu)造樹型結(jié)構(gòu)
 */
public class MenuTreeUtil {
    
    public static Map mapArray = new LinkedHashMap();  
    public List menuCommon;  
    public List list = new ArrayList();  
      
    public List menuList(List menu){      
        this.menuCommon = menu;  
        for (Tree x : menu) {     
            Map mapArr = new LinkedHashMap();  
            if(x.getpId()=="0"){  
                mapArr.put("id", x.getId());  
                mapArr.put("name", x.getName());    
                mapArr.put("pid", x.getpId());    
                mapArr.put("childList", menuChild(x.getId()));    
                list.add(mapArr);  
            }  
        }     
        return list;  
    }  
   
    public List menuChild(String id){  
        List lists = new ArrayList();  
        for(Tree a:menuCommon){  
            Map childArray = new LinkedHashMap();  
            if(a.getpId() == id){  
                childArray.put("id", a.getId());  
                childArray.put("name", a.getName());  
                childArray.put("pid", a.getpId());  
                childArray.put("childList", menuChild(a.getId()));
                lists.add(childArray);  
            }  
        }  
        return lists; 
    }  

}

3、最后在控制臺(tái)請(qǐng)求方法調(diào)用數(shù)據(jù)就行了,在controller的方法如下:

/**
     * 顯示APP樹形結(jié)構(gòu)
     */
    @RequestMapping(value = { "getAPPTree" }, produces = "text/html;charset=UTF-8")
    @ResponseBody
    public String getAPPTree(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map returnmap = new HashMap<>();
        MenuTreeUtil menuTree = new MenuTreeUtil();
        PageData pd = this.getPageData();
        try {
            //這里的方法是根據(jù)前臺(tái)的機(jī)構(gòu)類型代碼來(lái)查找數(shù)據(jù)庫(kù)數(shù)據(jù)的,這里不多加解釋,因人而異
            List list = dataDicService.buildTree(pd.getString("instType"));
            List menuList = menuTree.menuList(list);
            //區(qū)別于web端,這邊APP端list不能轉(zhuǎn)為json格式,直接將list傳給前臺(tái),轉(zhuǎn)成json對(duì)象的話vuejs前臺(tái)無(wú)法識(shí)別渲染
            returnmap.put("list", menuList);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return JsonMapper.toJsonString(returnmap);
    }

4、然后前臺(tái)ajax調(diào)用第三部的接口方法就而已請(qǐng)求到所需的數(shù)據(jù),如何渲染成好的前臺(tái)頁(yè)面,參照我另一篇文章:vuejs使用遞歸組件實(shí)現(xiàn)樹形目錄

java構(gòu)造樹形菜單數(shù)據(jù)就說(shuō)到這里啦,希望對(duì)大家有幫助,我的分享一般都是特別詳細(xì)的,除了涉及項(xiàng)目隱私之外,是不會(huì)對(duì)大家有所保留的喲

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67654.html

相關(guān)文章

  • 項(xiàng)目中用到的樹形數(shù)據(jù)

    摘要:經(jīng)過(guò)分析和思考,我決定不采用遞歸的方式來(lái)編寫樹形數(shù)據(jù)的處理,最終選用來(lái)維護(hù)樹節(jié)點(diǎn)之間的關(guān)系。以權(quán)限樹為例,做一個(gè)樹形數(shù)據(jù)工具類的設(shè)計(jì)。 1.簡(jiǎn)介 ? 在一些管理系統(tǒng)中一般都會(huì)用到,會(huì)用到一些樹形數(shù)據(jù),例如部門組織以及權(quán)限等數(shù)據(jù),都得生成樹形數(shù)據(jù),需要寫一些樹形數(shù)據(jù)生成工具,一般使用遞歸的方式,性能低下還可能會(huì)導(dǎo)致爆棧。經(jīng)過(guò)分析和思考,我決定不采用遞歸的方式來(lái)編寫樹形數(shù)據(jù)的處理,最...

    douzifly 評(píng)論0 收藏0
  • 實(shí)現(xiàn)一個(gè)可無(wú)限折疊的table

    摘要:但實(shí)際上就是在上點(diǎn)擊時(shí)對(duì)其子集進(jìn)行隱藏或顯示通過(guò)縮進(jìn)的距離來(lái)表現(xiàn)層級(jí)關(guān)系在代碼里很東西其實(shí)都是偽裝出來(lái)的,例如我們要實(shí)現(xiàn)的這個(gè)可無(wú)限折疊的。 前言 如何在table上實(shí)現(xiàn)一個(gè)可折疊展開子節(jié)點(diǎn)的table?先看下最終實(shí)現(xiàn)效果圖: showImg(https://segmentfault.com/img/remote/1460000017033990?w=758&h=453); 其實(shí)這個(gè)項(xiàng)...

    crossea 評(píng)論0 收藏0
  • js遞歸,無(wú)限分級(jí)樹形折疊菜單

    摘要:效果圖表結(jié)構(gòu)形式數(shù)據(jù)數(shù)據(jù)第一級(jí)是第二級(jí)是廣東第二級(jí)是廣西第三級(jí)是玉林第三級(jí)是北流廣東廣州天河白云廣西玉林北流深圳東莞松山湖部分獲取省一級(jí)遞歸結(jié)構(gòu)形式數(shù)據(jù)數(shù)據(jù)廣東廣州天河白云深圳東莞松山湖廣西玉林北流部分獲取省一級(jí)遞歸兩者區(qū)別數(shù)據(jù)表形式數(shù)據(jù)遞 效果圖 showImg(https://segmentfault.com/img/bVbi519?w=883&h=437); mysql表結(jié)構(gòu)形式...

    HitenDev 評(píng)論0 收藏0
  • 分層數(shù)據(jù)Hierarchical Data探索(1.遞歸)

    摘要:分層數(shù)據(jù)探索例如無(wú)限級(jí)分類多級(jí)菜單省份城市引言什么是分層數(shù)據(jù)類似于樹形結(jié)構(gòu),除了根節(jié)點(diǎn)和葉子節(jié)點(diǎn)外,所有節(jié)點(diǎn)都有一個(gè)父節(jié)點(diǎn)和一個(gè)或多個(gè)子節(jié)點(diǎn)。接下來(lái)我會(huì)先通過(guò)一般方法和遞歸方法來(lái)實(shí)現(xiàn)無(wú)限極分類,然后再通過(guò)兩種數(shù)據(jù)模型來(lái)談一談分層數(shù)據(jù)的處理。 分層數(shù)據(jù)Hierarchical Data探索(例如:無(wú)限級(jí)分類、多級(jí)菜單、省份城市) 引言 什么是分層數(shù)據(jù)? 類似于樹形結(jié)構(gòu),除了根節(jié)點(diǎn)和葉子節(jié)...

    yzd 評(píng)論0 收藏0
  • JavaScript實(shí)現(xiàn)無(wú)限級(jí)遞歸樹

    摘要:需求最近遇到一個(gè)需求,平時(shí)被后臺(tái)慣著直接返回了樹形結(jié)構(gòu)給到前端,前端對(duì)這種嵌套類型的數(shù)據(jù)如地區(qū)的級(jí)聯(lián)或菜單的樹形結(jié)構(gòu)省掉了一層處理。當(dāng)然,沒(méi)用好就相當(dāng)于一堆廢鐵,甚至將導(dǎo)致一些不可預(yù)料的結(jié)果。相比起遞歸,我更喜歡這種方法。 需求 最近遇到一個(gè)需求,平時(shí)被后臺(tái)慣著直接返回了樹形結(jié)構(gòu)給到前端,前端對(duì)這種嵌套類型的數(shù)據(jù)(如地區(qū)的級(jí)聯(lián)或菜單的樹形結(jié)構(gòu))省掉了一層處理。換了個(gè)后臺(tái)小哥哥返回了扁平...

    atinosun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<