全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java实现构造无限层级树形菜单

这里来讲一下后台java如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。

我们来理一下如何实现构造多叉树的逻辑吧,其实整个问题概括起来就是

1、构造一个实体类,用来存储节点,所以我们构造的需要四个对象(id,pid,name,和chirenList)

2、构造菜单结构

3、构造子菜单,如此循环,通过pid判断上级菜单

具体实现:

1、这里构造Tree.java实体类

package com.tcl.jr.crm.entity;

/**
 * 类名称:Tree
 * 类描述:树形结构
 */
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、封装树形结构类,这里我封装成一个通用的工具类,方便项目中使用,MenuTreeUtil.java,完整代码如下,可直接复制使用:

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
 * 类描述:递归构造树型结构
 */
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、最后在控制台请求方法调用数据就行了,在controller的方法如下:

/**
   * 显示APP树形结构
   */
  @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 {
      //这里的方法是根据前台的机构类型代码来查找数据库数据的,这里不多加解释,因人而异
      List<Tree> list = dataDicService.buildTree(pd.getString("instType"));
      List<Object> menuList = menuTree.menuList(list);
      //区别于web端,这边APP端list不能转为json格式,直接将list传给前台,转成json对象的话vuejs前台无法识别渲染
      returnmap.put("list", menuList);
    } catch (Exception e) {
      logger.error(e.getMessage());
    }
    return JsonMapper.toJsonString(returnmap);
  }

4、然后前台ajax调用第三部的接口方法就而已请求到所需的数据,如何渲染成好的前台页面,参照我另一篇文章:vuejs使用递归组件实现树形目录

java构造树形菜单数据就说到这里啦,希望对大家有帮助,我的分享一般都是特别详细的,除了涉及项目隐私之外,是不会对大家有所保留的哟,也希望大家多多支持。


# java  # 无限层级树形  # 无限层级树形菜单  # 如何实现java递归 处理权限管理菜单树或分类  # Java递归遍历树形结构的实现代码  # java 实现简单圣诞树的示例代码(圣诞节快乐)  # Java Swing中的表格(JTable)和树(JTree)组件使用实例  # Java构建树形菜单的实例代码(支持多级菜单)  # Java Swing树状组件JTree用法实例详解  # Java遍历输出指定目录、树形结构所有文件包括子目录下的文件  # JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现  # Java实现的决策树算法完整实例  # java分类树  # 我从2s优化到0.1s  # 递归  # 都是  # 说到  # 所需  # 会对  # 就可  # 实体类  # 因人而异  # 可直接  # 树型  # 第三部  # 多加  # 转成  # 大家多多  # 如何实现  # 方法如下  # 无法识别  # 就行了  # setpId  # getpId 


相关文章: 黑客入侵网站服务器的常见手法有哪些?  c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  家庭建站与云服务器建站,如何选择更优?  如何在万网自助建站平台快速创建网站?  教学网站制作软件,学习*后期制作的网站有哪些?  制作销售网站教学视频,销售网站有哪些?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  建站主机如何安装配置?新手必看操作指南  深入理解Android中的xmlns:tools属性  非常酷的网站设计制作软件,酷培ai教育官方网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站为何优先选择香港服务器?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  建站主机核心功能解析:服务器选择与网站搭建流程指南  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何通过FTP服务器快速搭建网站?  已有域名和空间如何搭建网站?  如何在IIS中新建站点并配置端口与IP地址?  孙琪峥织梦建站教程如何优化数据库安全?  ,怎么在广州志愿者网站注册?  ,怎么用自己头像做动态表情包?  如何在宝塔面板创建新站点?  如何快速搭建高效WAP手机网站吸引移动用户?  h5网站制作工具有哪些,h5页面制作工具有哪些?  测试制作网站有哪些,测试性取向的权威测试或者网站?  建站之星收费标准详解:套餐费用及年费价格表一览  手机网站制作与建设方案,手机网站如何建设?  电商网站制作公司有哪些,1688网是什么意思?  如何在香港服务器上快速搭建免备案网站?  建站主机选虚拟主机还是云服务器更好?  婚礼视频制作网站,学习*后期制作的网站有哪些?  已有域名能否直接搭建网站?  如何用VPS主机快速搭建个人网站?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  如何挑选优质建站一级代理提升网站排名?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  如何在阿里云虚拟主机上快速搭建个人网站?  如何高效利用亚马逊云主机搭建企业网站?  北京网站制作公司哪家好一点,北京租房网站有哪些?  建站之星免费版是否永久可用?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  焦点电影公司作品,电影焦点结局是什么?  网站制作软件有哪些,制图软件有哪些?  如何确保FTP站点访问权限与数据传输安全?  如何在云指建站中生成FTP站点?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  建站之星如何修改网站生成路径?  如何选择域名并搭建高效网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。