摘要:繼續(xù)填上篇文章的坑,這里來講一下后臺如何構(gòu)造多叉樹,這樣前臺就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。
繼續(xù)填上篇文章的坑,這里來講一下后臺java如何構(gòu)造多叉樹,這樣前臺就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。
我們來理一下如何實現(xiàn)構(gòu)造多叉樹的邏輯吧,其實整個問題概括起來就是
1、構(gòu)造一個實體類,用來存儲節(jié)點,所以我們構(gòu)造的需要四個對象(id,pid,name,和chirenList)
2、構(gòu)造菜單結(jié)構(gòu)
3、構(gòu)造子菜單,如此循環(huán),通過pid判斷上級菜單
具體實現(xiàn):
1、這里構(gòu)造Tree.java實體類
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)類,這里我封裝成一個通用的工具類,方便項目中使用,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 MapmapArray = new LinkedHashMap (); public List menuCommon; public List
3、最后在控制臺請求方法調(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 { Mapreturnmap = new HashMap<>(); MenuTreeUtil menuTree = new MenuTreeUtil(); PageData pd = this.getPageData(); try { //這里的方法是根據(jù)前臺的機構(gòu)類型代碼來查找數(shù)據(jù)庫數(shù)據(jù)的,這里不多加解釋,因人而異 List list = dataDicService.buildTree(pd.getString("instType")); List menuList = menuTree.menuList(list); //區(qū)別于web端,這邊APP端list不能轉(zhuǎn)為json格式,直接將list傳給前臺,轉(zhuǎn)成json對象的話vuejs前臺無法識別渲染 returnmap.put("list", menuList); } catch (Exception e) { logger.error(e.getMessage()); } return JsonMapper.toJsonString(returnmap); }
4、然后前臺ajax調(diào)用第三部的接口方法就而已請求到所需的數(shù)據(jù),如何渲染成好的前臺頁面,參照我另一篇文章:vuejs使用遞歸組件實現(xiàn)樹形目錄
java構(gòu)造樹形菜單數(shù)據(jù)就說到這里啦,希望對大家有幫助,我的分享一般都是特別詳細的,除了涉及項目隱私之外,是不會對大家有所保留的喲
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/67654.html
摘要:經(jīng)過分析和思考,我決定不采用遞歸的方式來編寫樹形數(shù)據(jù)的處理,最終選用來維護樹節(jié)點之間的關(guān)系。以權(quán)限樹為例,做一個樹形數(shù)據(jù)工具類的設(shè)計。 1.簡介 ? 在一些管理系統(tǒng)中一般都會用到,會用到一些樹形數(shù)據(jù),例如部門組織以及權(quán)限等數(shù)據(jù),都得生成樹形數(shù)據(jù),需要寫一些樹形數(shù)據(jù)生成工具,一般使用遞歸的方式,性能低下還可能會導(dǎo)致爆棧。經(jīng)過分析和思考,我決定不采用遞歸的方式來編寫樹形數(shù)據(jù)的處理,最...
摘要:但實際上就是在上點擊時對其子集進行隱藏或顯示通過縮進的距離來表現(xiàn)層級關(guān)系在代碼里很東西其實都是偽裝出來的,例如我們要實現(xiàn)的這個可無限折疊的。 前言 如何在table上實現(xiàn)一個可折疊展開子節(jié)點的table?先看下最終實現(xiàn)效果圖: showImg(https://segmentfault.com/img/remote/1460000017033990?w=758&h=453); 其實這個項...
摘要:效果圖表結(jié)構(gòu)形式數(shù)據(jù)數(shù)據(jù)第一級是第二級是廣東第二級是廣西第三級是玉林第三級是北流廣東廣州天河白云廣西玉林北流深圳東莞松山湖部分獲取省一級遞歸結(jié)構(gòu)形式數(shù)據(jù)數(shù)據(jù)廣東廣州天河白云深圳東莞松山湖廣西玉林北流部分獲取省一級遞歸兩者區(qū)別數(shù)據(jù)表形式數(shù)據(jù)遞 效果圖 showImg(https://segmentfault.com/img/bVbi519?w=883&h=437); mysql表結(jié)構(gòu)形式...
摘要:分層數(shù)據(jù)探索例如無限級分類多級菜單省份城市引言什么是分層數(shù)據(jù)類似于樹形結(jié)構(gòu),除了根節(jié)點和葉子節(jié)點外,所有節(jié)點都有一個父節(jié)點和一個或多個子節(jié)點。接下來我會先通過一般方法和遞歸方法來實現(xiàn)無限極分類,然后再通過兩種數(shù)據(jù)模型來談一談分層數(shù)據(jù)的處理。 分層數(shù)據(jù)Hierarchical Data探索(例如:無限級分類、多級菜單、省份城市) 引言 什么是分層數(shù)據(jù)? 類似于樹形結(jié)構(gòu),除了根節(jié)點和葉子節(jié)...
摘要:需求最近遇到一個需求,平時被后臺慣著直接返回了樹形結(jié)構(gòu)給到前端,前端對這種嵌套類型的數(shù)據(jù)如地區(qū)的級聯(lián)或菜單的樹形結(jié)構(gòu)省掉了一層處理。當然,沒用好就相當于一堆廢鐵,甚至將導(dǎo)致一些不可預(yù)料的結(jié)果。相比起遞歸,我更喜歡這種方法。 需求 最近遇到一個需求,平時被后臺慣著直接返回了樹形結(jié)構(gòu)給到前端,前端對這種嵌套類型的數(shù)據(jù)(如地區(qū)的級聯(lián)或菜單的樹形結(jié)構(gòu))省掉了一層處理。換了個后臺小哥哥返回了扁平...
閱讀 5024·2021-11-15 11:39
閱讀 2766·2021-11-11 16:55
閱讀 2264·2021-10-25 09:44
閱讀 3576·2021-09-22 16:02
閱讀 2494·2019-08-30 15:55
閱讀 3192·2019-08-30 13:46
閱讀 2771·2019-08-30 13:15
閱讀 2018·2019-08-30 11:12