树形结构递归_java最优化的方法递归构造树形结构

aec79d83004d02e1d5c9ee36755346e2.png

java最优化的方法递归构造树形结构

简介

    树形结构的前台页面展示在我们项目中很常用,所以小编整理了树形结构写法,目的不在于讲解内容在于可以方便大家拿到代码里面可以直接使用。做权限管理的时候经常会用到tree控件,以前前台用 jquery的时候用ztree,后来用easyui的时候框架自带了树形控件,最近在整理element ui的使用所以小编总结了element ui的树形结构的使用方法,接下来介绍的是element ui+spring boot递归构造树形结构,希望能够帮助大家,下面废话就不多说了,开始搞代码。

01

首先和大家看一下运行后的效果

树形结构递归_java最优化的方法递归构造树形结构_第1张图片 树形结构递归_java最优化的方法递归构造树形结构_第2张图片

02

element ui中el-tree的写法

1d626487ea86808a8bf2487f3d9a1833.png                    

el-tree是element uI的中树形结构的写法,主要使用的场景是在需要父级和子级的情况下使用,下面看一下前台的写法。

5e97c6113d320b375d156ed6fc3e1eff.png 5437f709af4b512b90624dd1cfd65120.png

HTML的代码

 :data="sysMenuTreeData"  show-checkbox default-expand-all node-key="menuId"  ref="tree" highlight-current :default-checked-keys='defaultExpandedKeys'  :props="defaultProps" @node-click="handleNodeClick">
649e224a906b815090c3f2dc250501b9.png

JS的代码

request({
        url:'/sys/SysMenu/geButtonTreeData',  method: 'POST',  data: {}}).then((res) => {
        debugger  if (res.data != null) {
          this.sysMenuTreeData = res.data;  } else {
          this.sysMenuTreeData = "";  }}).catch((response) => {
        this.sysMenuTreeData="";});

03

spring boot后台

1d626487ea86808a8bf2487f3d9a1833.png

java后台递归构造树形结构,其实很简单,设计表结构的时候定义父级字段和子级字段,然后定义一个树形结构的实体,比如treeDto,建立实体的父子级关系。然后把数据按照父子级关系循环递归就可以了。

5e97c6113d320b375d156ed6fc3e1eff.png 5437f709af4b512b90624dd1cfd65120.png

首先定义一个实体dto

public class SysMenuTreeOutVo extends SysMenu {
          private String id;    private String value;    private String label;    private List children;    public String getId() {
              return id;    }    public void setId(String id) {
              this.id = id;    }    public String getLabel() {
              return label;    }    public void setLabel(String label) {
              this.label = label;    }    public ListgetChildren() {
              return children;    }    public void setChildren(List children) {
              this.children = children;    }    public String getValue() {
              return value;    }    public void setValue(String value) {
              this.value = value;    }
5437f709af4b512b90624dd1cfd65120.png

下面是controller的代码重点来了,循环递归数据

/** * 获取菜单数据 * @return */@RequestMapping(value = "/getMenuTree", method = {RequestMethod.GET, RequestMethod.POST})@ResponseBodypublic ResultInfo getSysRole() {
          List sysMenuList = this.sysMenuService.getSysMenuTree();    List resultList = new ArrayList();    // 把数据组织成树    SysMenu sysMenu = new SysMenu();    sysMenu.setMenuId("");    resultList = this.listToTree(sysMenu, sysMenuList);    // 定义传参    ResultInfo result = new ResultInfo();    result.setData(resultList);    return result;}/** * 构造树形菜单 * @param parmData 父级 * @param list 子级数据 * @return */private List listToTree(SysMenu parmData, Listlist) {
          List childData = new ArrayList();    for (SysMenuTreeOutVo data : list) {
              if ((parmData.getMenuId() == null && data.getParentId() == null) ||                data.getParentId() != null && data.getParentId().equals(parmData.getMenuId())        ) {
                  childData.add(data);        }    }    List resultList = new ArrayList();    for (SysMenuTreeOutVo item : childData) {
              item.setId(item.getMenuId());        item.setValue(item.getMenuId());        item.setLabel(item.getMenuName());        item.setChildren(this.listToTree(item, list));        resultList.add(item);    }    return resultList;}

    java的树形递归结构基本上是这么实现,主要的内容在于后台给前台数据的整理,只要后台整理成前台需要的json数据,前台自动加载树形结构。后续我会分享更多的技术相关的内容,请大家多多关注。

8aa792ae4a90d512fa3513af40d21875.gif

扫码关注我们

树形结构递归_java最优化的方法递归构造树形结构_第3张图片

你可能感兴趣的:(树形结构递归)