java實(shí)現(xiàn)構(gòu)造無限層級樹形菜單
這里來講一下后臺java如何構(gòu)造多叉樹,這樣前臺就可接收到數(shù)據(jù)遞歸構(gòu)造樹形菜單了。
我們來理一下如何實(shí)現(xiàn)構(gòu)造多叉樹的邏輯吧,其實(shí)整個(gè)問題概括起來就是
1、構(gòu)造一個(gè)實(shí)體類,用來存儲節(jié)點(diǎn),所以我們構(gòu)造的需要四個(gè)對象(id,pid,name,和chirenList)
2、構(gòu)造菜單結(jié)構(gòu)
3、構(gòu)造子菜單,如此循環(huán),通過pid判斷上級菜單
具體實(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、最后在控制臺請求方法調(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使用遞歸組件實(shí)現(xiàn)樹形目錄
java構(gòu)造樹形菜單數(shù)據(jù)就說到這里啦,希望對大家有幫助,我的分享一般都是特別詳細(xì)的,除了涉及項(xiàng)目隱私之外,是不會對大家有所保留的喲,也希望大家多多支持腳本之家。
- 如何實(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í)例代碼(支持多級菜單)
- Java Swing樹狀組件JTree用法實(shí)例詳解
- Java遍歷輸出指定目錄、樹形結(jié)構(gòu)所有文件包括子目錄下的文件
- JSON復(fù)雜數(shù)據(jù)處理之Json樹形結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)Java對象并存儲到數(shù)據(jù)庫的實(shí)現(xiàn)
- Java實(shí)現(xiàn)的決策樹算法完整實(shí)例
- java分類樹,我從2s優(yōu)化到0.1s
相關(guān)文章
Java實(shí)現(xiàn)將String轉(zhuǎn)化為Int
這篇文章主要介紹了Java實(shí)現(xiàn)將String轉(zhuǎn)化為Int方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
Java設(shè)計(jì)模式中的建造者(Builder)模式解讀
這篇文章主要介紹了Java設(shè)計(jì)模式中的建造者(Builder)模式解讀, 建造者模式是一種創(chuàng)建對象的設(shè)計(jì)模式,它通過將對象的構(gòu)建過程分解為多個(gè)步驟,并使用一個(gè)建造者類來封裝這些步驟,從而使得對象的構(gòu)建過程更加靈活和可擴(kuò)展,需要的朋友可以參考下2023-10-10
簡單工廠模式_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了簡單工廠模式的相關(guān)資料,和大家一起學(xué)習(xí)靜態(tài)工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
java實(shí)現(xiàn)裝飾器模式(Decorator Pattern)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)裝飾器模式Decorator Pattern,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10
Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例
這篇文章主要介紹了Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-05-05
Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn)
這篇文章主要介紹了Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

