java實現(xiàn)構(gòu)造無限層級樹形菜單
這里來講一下后臺java如何構(gòu)造多叉樹,這樣前臺就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。
我們來理一下如何實現(xiàn)構(gòu)造多叉樹的邏輯吧,其實整個問題概括起來就是
1、構(gòu)造一個實體類,用來存儲節(jié)點(diǎn),所以我們構(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 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、最后在控制臺請求方法調(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ù)前臺的機(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傳給前臺,轉(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ù)就說到這里啦,希望對大家有幫助,我的分享一般都是特別詳細(xì)的,除了涉及項目隱私之外,是不會對大家有所保留的喲,也希望大家多多支持腳本之家。
- 如何實現(xiàn)java遞歸 處理權(quán)限管理菜單樹或分類
- Java遞歸遍歷樹形結(jié)構(gòu)的實現(xiàn)代碼
- java 實現(xiàn)簡單圣誕樹的示例代碼(圣誕節(jié)快樂)
- Java Swing中的表格(JTable)和樹(JTree)組件使用實例
- Java構(gòu)建樹形菜單的實例代碼(支持多級菜單)
- Java Swing樹狀組件JTree用法實例詳解
- Java遍歷輸出指定目錄、樹形結(jié)構(gòu)所有文件包括子目錄下的文件
- JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對象并存儲到數(shù)據(jù)庫的實現(xiàn)
- Java實現(xiàn)的決策樹算法完整實例
- java分類樹,我從2s優(yōu)化到0.1s
相關(guān)文章
SpringSecurity整合springBoot、redis實現(xiàn)登錄互踢功能
這篇文章主要介紹了SpringSecurity整合springBoot、redis實現(xiàn)登錄互踢,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05SpringMVC Controller解析ajax參數(shù)過程詳解
這篇文章主要介紹了SpringMVC Controller解析ajax參數(shù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07Spring Data Jpa實現(xiàn)分頁和排序代碼實例
本篇文章主要介紹了Spring Data Jpa實現(xiàn)分頁和排序代碼實例,具有一定的參考價值,有興趣的可以了解一下。2017-03-03Java設(shè)計模式之抽象工廠模式AbstractFactoryPattern詳解
這篇文章主要介紹了Java設(shè)計模式之抽象工廠模式AbstractFactoryPattern詳解,抽象工廠模式是一種軟件開發(fā)設(shè)計模式,抽象工廠模式提供了一種方式,可以將一組具有同一主題的單獨(dú)的工廠封裝起來,需要的朋友可以參考下2023-10-10解決MyEclipse出現(xiàn)the user operation is waiting的問題
今天做項目的時候每次修改代碼保存后都會跳出一個框框,然后就有兩個進(jìn)度條,上面寫the user operation is wating...小編去網(wǎng)上查了查解決了這個問題,下面跟大家分享一下。2018-04-04