最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年09月30日 17:11:20   作者:我是帥帥的玉米  
這篇文章主要介紹了java實(shí)現(xiàn)構(gòu)造無限層級樹形菜單,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

這里來講一下后臺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)目隱私之外,是不會對大家有所保留的喲,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)中國象棋的示例代碼

    Java實(shí)現(xiàn)中國象棋的示例代碼

    中國象棋是起源于中國的一種棋,屬于二人對抗性游戲的一種,在中國有著悠久的歷史。由于用具簡單,趣味性強(qiáng),成為流行極為廣泛的棋藝活動。本文將利用Java實(shí)現(xiàn)這一經(jīng)典游戲,需要的可以參考一下
    2022-02-02
  • Java中斷線程的方法

    Java中斷線程的方法

    這篇文章主要介紹了Java中斷線程的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • CyclicBarrier線程同步共享變量底層原理示例解析

    CyclicBarrier線程同步共享變量底層原理示例解析

    這篇文章主要為大家介紹了CyclicBarrier線程同步共享變量底層原理示例解析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java實(shí)現(xiàn)將String轉(zhuǎn)化為Int

    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)模式解讀

    這篇文章主要介紹了Java設(shè)計(jì)模式中的建造者(Builder)模式解讀, 建造者模式是一種創(chuàng)建對象的設(shè)計(jì)模式,它通過將對象的構(gòu)建過程分解為多個(gè)步驟,并使用一個(gè)建造者類來封裝這些步驟,從而使得對象的構(gòu)建過程更加靈活和可擴(kuò)展,需要的朋友可以參考下
    2023-10-10
  • 簡單工廠模式_動力節(jié)點(diǎn)Java學(xué)院整理

    簡單工廠模式_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了簡單工廠模式的相關(guān)資料,和大家一起學(xué)習(xí)靜態(tài)工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺談一下Java中的內(nèi)存模型JMM

    淺談一下Java中的內(nèi)存模型JMM

    這篇文章主要介紹了淺談一下Java中的內(nèi)存模型JMM,JMM,全程是?Java?Memory?Model?,直譯就是?Java?內(nèi)存模型,根據(jù)這個(gè)名字,可以知道它是?Java?設(shè)計(jì)用來管理內(nèi)存的一個(gè)模型,需要的朋友可以參考下
    2023-08-08
  • java實(shí)現(xiàn)裝飾器模式(Decorator Pattern)

    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í)例

    這篇文章主要介紹了Java多線程編程之使用Exchanger數(shù)據(jù)交換實(shí)例,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-05-05
  • Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn)

    Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn)

    這篇文章主要介紹了Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論

泸州市| 博兴县| 福贡县| 香格里拉县| 渭南市| 岳池县| 资溪县| 沙坪坝区| 宜都市| 宁蒗| 长寿区| 华亭县| 泰安市| 台山市| 华坪县| 尚义县| 杭州市| 新邵县| 永新县| 鹤庆县| 隆林| 长治县| 湖南省| 正阳县| 长宁县| 郧西县| 铜山县| 土默特右旗| 巨野县| 绍兴市| 长阳| 营口市| 巨鹿县| 安泽县| 讷河市| 循化| 海阳市| 策勒县| 巴东县| 怀来县| 铜山县|