java實(shí)現(xiàn)構(gòu)造無限層級(jí)樹形菜單
這里來講一下后臺(tái)java如何構(gòu)造多叉樹,這樣前臺(tái)就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。
我們來理一下如何實(shí)現(xiàn)構(gòu)造多叉樹的邏輯吧,其實(shí)整個(gè)問題概括起來就是
1、構(gòu)造一個(gè)實(shí)體類,用來存儲(chǔ)節(jié)點(diǎn),所以我們構(gòu)造的需要四個(gè)對(duì)象(id,pid,name,和chirenList)
2、構(gòu)造菜單結(jié)構(gòu)
3、構(gòu)造子菜單,如此循環(huán),通過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<String,Object> mapArray = new LinkedHashMap<String, Object>(); public List<Tree> menuCommon; public List<Object> list = new ArrayList<Object>(); public List<Object> menuList(List<Tree> menu){ this.menuCommon = menu; for (Tree x : menu) { Map<String,Object> mapArr = new LinkedHashMap<String, Object>(); 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<Object> lists = new ArrayList<Object>(); for(Tree a:menuCommon){ Map<String,Object> childArray = new LinkedHashMap<String, Object>(); 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<String, Object> returnmap = new HashMap<>(); MenuTreeUtil menuTree = new MenuTreeUtil(); PageData pd = this.getPageData(); try { //這里的方法是根據(jù)前臺(tái)的機(jī)構(gòu)類型代碼來查找數(shù)據(jù)庫數(shù)據(jù)的,這里不多加解釋,因人而異 List<Tree> list = dataDicService.buildTree(pd.getString("instType")); List<Object> menuList = menuTree.menuList(list); //區(qū)別于web端,這邊APP端list不能轉(zhuǎn)為json格式,直接將list傳給前臺(tái),轉(zhuǎn)成json對(duì)象的話vuejs前臺(tái)無法識(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)頁面,參照我另一篇文章:vuejs使用遞歸組件實(shí)現(xiàn)樹形目錄
java構(gòu)造樹形菜單數(shù)據(jù)就說到這里啦,希望對(duì)大家有幫助,我的分享一般都是特別詳細(xì)的,除了涉及項(xiàng)目隱私之外,是不會(huì)對(duì)大家有所保留的喲,也希望大家多多支持腳本之家。
- 如何實(shí)現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類
- Java遞歸遍歷樹形結(jié)構(gòu)的實(shí)現(xiàn)代碼
- java 實(shí)現(xiàn)簡單圣誕樹的示例代碼(圣誕節(jié)快樂)
- Java Swing中的表格(JTable)和樹(JTree)組件使用實(shí)例
- Java構(gòu)建樹形菜單的實(shí)例代碼(支持多級(jí)菜單)
- Java Swing樹狀組件JTree用法實(shí)例詳解
- Java遍歷輸出指定目錄、樹形結(jié)構(gòu)所有文件包括子目錄下的文件
- JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對(duì)象并存儲(chǔ)到數(shù)據(jù)庫的實(shí)現(xiàn)
- Java實(shí)現(xiàn)的決策樹算法完整實(shí)例
- java分類樹,我從2s優(yōu)化到0.1s
相關(guān)文章
SpringSecurity整合springBoot、redis實(shí)現(xiàn)登錄互踢功能
這篇文章主要介紹了SpringSecurity整合springBoot、redis實(shí)現(xiàn)登錄互踢,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-05-05Java通過SSM完成水果商城批發(fā)平臺(tái)流程
這是一個(gè)使用了java+SSM開發(fā)的網(wǎng)上水果商城批發(fā)平臺(tái),是一個(gè)實(shí)戰(zhàn)小練習(xí),具有水果商城批發(fā)該有的所有功能,感興趣的朋友快來看看吧2022-06-06SpringMVC Controller解析ajax參數(shù)過程詳解
這篇文章主要介紹了SpringMVC Controller解析ajax參數(shù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07Spring Data Jpa實(shí)現(xiàn)分頁和排序代碼實(shí)例
本篇文章主要介紹了Spring Data Jpa實(shí)現(xiàn)分頁和排序代碼實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-03-03Java設(shè)計(jì)模式之抽象工廠模式AbstractFactoryPattern詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之抽象工廠模式AbstractFactoryPattern詳解,抽象工廠模式是一種軟件開發(fā)設(shè)計(jì)模式,抽象工廠模式提供了一種方式,可以將一組具有同一主題的單獨(dú)的工廠封裝起來,需要的朋友可以參考下2023-10-10解決MyEclipse出現(xiàn)the user operation is waiting的問題
今天做項(xiàng)目的時(shí)候每次修改代碼保存后都會(huì)跳出一個(gè)框框,然后就有兩個(gè)進(jìn)度條,上面寫the user operation is wating...小編去網(wǎng)上查了查解決了這個(gè)問題,下面跟大家分享一下。2018-04-04java實(shí)現(xiàn)清理DNS Cache的方法
這篇文章主要介紹了java實(shí)現(xiàn)清理DNS Cache的方法,分析了幾種常用的清理方法,并給出了反射清理的完整實(shí)例,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01