资讯专栏INFORMATION COLUMN

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

seasonley / 426人阅读

摘要:继续填上篇文章的坑,这里来讲一下后台如何构造多叉树,这样前台就可接收到数据递归构造树形菜单了。

继续填上篇文章的坑,这里来讲一下后台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 mapArray = new LinkedHashMap();  
    public List menuCommon;  
    public List list = new ArrayList();  
      
    public List menuList(List menu){      
        this.menuCommon = menu;  
        for (Tree x : menu) {     
            Map mapArr = new LinkedHashMap();  
            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 lists = new ArrayList();  
        for(Tree a:menuCommon){  
            Map childArray = new LinkedHashMap();  
            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 returnmap = new HashMap<>();
        MenuTreeUtil menuTree = new MenuTreeUtil();
        PageData pd = this.getPageData();
        try {
            //这里的方法是根据前台的机构类型代码来查找数据库数据的,这里不多加解释,因人而异
            List list = dataDicService.buildTree(pd.getString("instType"));
            List 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构造树形菜单数据就说到这里啦,希望对大家有帮助,我的分享一般都是特别详细的,除了涉及项目隐私之外,是不会对大家有所保留的哟

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67654.html

相关文章

  • 项目中用到的树形数据

    摘要:经过分析和思考,我决定不采用递归的方式来编写树形数据的处理,最终选用来维护树节点之间的关系。以权限树为例,做一个树形数据工具类的设计。 1.简介 ​ 在一些管理系统中一般都会用到,会用到一些树形数据,例如部门组织以及权限等数据,都得生成树形数据,需要写一些树形数据生成工具,一般使用递归的方式,性能低下还可能会导致爆栈。经过分析和思考,我决定不采用递归的方式来编写树形数据的处理,最...

    douzifly 评论0 收藏0
  • 实现一个可无限折叠的table

    摘要:但实际上就是在上点击时对其子集进行隐藏或显示通过缩进的距离来表现层级关系在代码里很东西其实都是伪装出来的,例如我们要实现的这个可无限折叠的。 前言 如何在table上实现一个可折叠展开子节点的table?先看下最终实现效果图: showImg(https://segmentfault.com/img/remote/1460000017033990?w=758&h=453); 其实这个项...

    crossea 评论0 收藏0
  • js递归,无限分级树形折叠菜单

    摘要:效果图表结构形式数据数据第一级是第二级是广东第二级是广西第三级是玉林第三级是北流广东广州天河白云广西玉林北流深圳东莞松山湖部分获取省一级递归结构形式数据数据广东广州天河白云深圳东莞松山湖广西玉林北流部分获取省一级递归两者区别数据表形式数据递 效果图 showImg(https://segmentfault.com/img/bVbi519?w=883&h=437); mysql表结构形式...

    HitenDev 评论0 收藏0
  • 分层数据Hierarchical Data探索(1.递归)

    摘要:分层数据探索例如无限级分类多级菜单省份城市引言什么是分层数据类似于树形结构,除了根节点和叶子节点外,所有节点都有一个父节点和一个或多个子节点。接下来我会先通过一般方法和递归方法来实现无限极分类,然后再通过两种数据模型来谈一谈分层数据的处理。 分层数据Hierarchical Data探索(例如:无限级分类、多级菜单、省份城市) 引言 什么是分层数据? 类似于树形结构,除了根节点和叶子节...

    yzd 评论0 收藏0
  • JavaScript实现无限级递归树

    摘要:需求最近遇到一个需求,平时被后台惯着直接返回了树形结构给到前端,前端对这种嵌套类型的数据如地区的级联或菜单的树形结构省掉了一层处理。当然,没用好就相当于一堆废铁,甚至将导致一些不可预料的结果。相比起递归,我更喜欢这种方法。 需求 最近遇到一个需求,平时被后台惯着直接返回了树形结构给到前端,前端对这种嵌套类型的数据(如地区的级联或菜单的树形结构)省掉了一层处理。换了个后台小哥哥返回了扁平...

    atinosun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<