当前位置: 首页 > 编程笔记 >

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

澹台权
2023-03-14
本文向大家介绍java实现构造无限层级树形菜单,包括了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构造树形菜单数据就说到这里啦,希望对大家有帮助,我的分享一般都是特别详细的,除了涉及项目隐私之外,是不会对大家有所保留的哟,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Vue.js组件tree实现无限级树形菜单,包括了Vue.js组件tree实现无限级树形菜单的使用技巧和注意事项,需要的朋友参考一下 分享一段用 <ul>和<li>标签实现tree的代码,可能写的不是很好,如果大家有更好的希望分享下。 代码看这里喽: html代码: js代码: 效果图: 本文已被整理到了《Vue.js前端组件学习教程》,欢迎大家学习阅读。 关于vue.js组件的教程

  • 本文向大家介绍java、js中实现无限层级的树形结构方法(类似递归),包括了java、js中实现无限层级的树形结构方法(类似递归)的使用技巧和注意事项,需要的朋友参考一下 js中: java: 以上这篇java、js中实现无限层级的树形结构方法(类似递归)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍JS实现无限级网页折叠菜单(类似树形菜单)效果代码,包括了JS实现无限级网页折叠菜单(类似树形菜单)效果代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS实现无限级网页折叠菜单(类似树形菜单)效果代码。分享给大家供大家参考。具体如下: 这是一款超不错的网页折叠菜单,采用JavaScript实现。折叠菜单是大家比较常见到的一种菜单形式,可广泛应用于管理系统、后台左侧、产品

  • 本文向大家介绍JS+CSS实现TreeMenu二级树形菜单完整实例,包括了JS+CSS实现TreeMenu二级树形菜单完整实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS+CSS实现TreeMenu二级树形菜单。分享给大家供大家参考。具体如下: 这是一款二级树形菜单示例:CSS TreeMenu ,非常漂亮的树形菜单,用在网站右侧比较合适。 运行效果截图如下: 在线演示地址如下:

  • 本文向大家介绍hovertree插件实现二级树形菜单(简单实用),包括了hovertree插件实现二级树形菜单(简单实用)的使用技巧和注意事项,需要的朋友参考一下 hovertree是一个仿京东的树形菜单jquery插件,暂时有银色和绿色两种。 下载网址:http://wd.jb51.net:81//201612/yuanma/hovertree-0.1.2_jb51.rar 可以设置菜单宽度(w

  • 本文向大家介绍javascript实现无限级select联动菜单,包括了javascript实现无限级select联动菜单的使用技巧和注意事项,需要的朋友参考一下 代码很简单,这里主要是给大家推荐一下本代码的实现思路,别具一格。 奉上代码: