java递归 处理权限管理菜单树或分类
1.数据库表设计

2.实体类设计
package com.ieou.capsule.dto.SystemPermissions; import java.util.List; /**
* 功能菜单类
*/
public class SystemPermissionsTree { private String functionCode;//菜单码 private String parentFunctionCode;//父级菜单码 private String functionName;//菜单名 private Boolean flag; // true:选中 false:未选中 private List<SystemPermissionsTree> childrenList; public String getFunctionCode() {
return functionCode;
} public void setFunctionCode(String functionCode) {
this.functionCode = functionCode;
} public String getParentFunctionCode() {
return parentFunctionCode;
} public void setParentFunctionCode(String parentFunctionCode) {
this.parentFunctionCode = parentFunctionCode;
} public String getFunctionName() {
return functionName;
} public void setFunctionName(String functionName) {
this.functionName = functionName;
} public Boolean getFlag() {
return flag;
} public void setFlag(Boolean flag) {
this.flag = flag;
} public List<SystemPermissionsTree> getChildrenList() {
return childrenList;
} public void setChildrenList(List<SystemPermissionsTree> childrenList) {
this.childrenList = childrenList;
}
}
3.递归工具类
package com.ieou.capsule.util; import com.ieou.capsule.dto.SystemPermissions.SystemPermissionsTree; import java.util.ArrayList;
import java.util.List; public class TreeUtil {
/**
* 作者:一沐枫一
* 来源:CSDN
* 原文:https://blog.csdn.net/gxgl8811/article/details/72803833
* 版权声明:本文为博主原创文章,转载请附上博文链接!
*/ public static List<SystemPermissionsTree> getTreeList(List<SystemPermissionsTree> entityList) {
List<SystemPermissionsTree> resultList = new ArrayList<>(); //获取顶层元素集合
String parentCode;
for (SystemPermissionsTree entity : entityList) {
parentCode = entity.getParentFunctionCode();
//顶层元素的parentCode==null或者为0
if (parentCode == null || "0".equals(parentCode)) {
resultList.add(entity);
}
} //获取每个顶层元素的子数据集合
for (SystemPermissionsTree entity : resultList) {
entity.setChildrenList(getSubList(entity.getFunctionCode(), entityList));
} return resultList;
} /**
* 获取子数据集合
*
* @param id
* @param entityList
* @return
* @author jianda
* @date 2017年5月29日
*/
private static List<SystemPermissionsTree> getSubList(String id, List<SystemPermissionsTree> entityList) {
List<SystemPermissionsTree> childList = new ArrayList<>();
String parentId; //子集的直接子对象
for (SystemPermissionsTree entity : entityList) {
parentId = entity.getParentFunctionCode();
if (id.equals(parentId)) {
childList.add(entity);
}
} //子集的间接子对象
for (SystemPermissionsTree entity : childList) {
entity.setChildrenList(getSubList(entity.getFunctionCode(), entityList));
} //递归退出条件
if (childList.size() == 0) {
return null;
} return childList;
} }
java递归 处理权限管理菜单树或分类的更多相关文章
- springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)
一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...
- [转]java web简单权限管理设计
原文地址:http://blog.csdn.net/zwx19921215/article/details/44467099 最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery eas ...
- java web简单权限管理设计
一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色 ...
- 【Java】JavaWeb权限管理
权限管理分析 每个网站都涉及到访问权限的控制.每个站点资源都需要被管理起来,用户只有具有访问某个资源的特定权限,才能够访问,否则拒绝访问.网站的访问权限控制,一种方法从 URI 入手,站点的每个资源都 ...
- java中通用权限管理设计(转)
原文地址:http://www.cnblogs.com/a7345678/archive/2008/09/25/1298838.html 转自博客园暗夜精灵-鬼才阁 实现业务系统中的用户权限管理 B/ ...
- vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成
由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...
- ERP的权限管理的操作与设计--开源软件诞生24
赤龙ERP用户与权限管理讲解--第24篇 用日志记录"开源软件"的诞生 [进入地址 点亮星星]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/re ...
- JAVA递归生成树形菜单
递归生成一个如图的菜单,编写两个类数据模型Menu.和创建树形的MenuTree.通过以下过程实现: 1.首先从菜单数据中获取所有根节点. 2.为根节点建立次级子树并拼接上. 3.递归为子节点建立次级 ...
- java生成多级菜单树
使用java实现一个多级菜单树结构 先上数据库 ps_pid字段很重要,是父级菜单的id Menu类 Menu类要新增一个字段,用来存放子菜单 /** * 子菜单列表 */ private List& ...
随机推荐
- Redhat 简单本地yum 配置
Redhat 简单本地yum 配置 一.将redhat 系统的镜像挂载到系统上 Vmware Workstion 环境下: [虚拟机设置]--[硬件]--[CD/DVD]--[使用ISO映像文件]-- ...
- shell命令行快捷键
ctrl+a[A]:将光标移到命令行开头 ctrl+e[E]:将光标移到命令行结尾 ctrl+c[C]:强制终止命令执行 ctrl+u[U]:删除/剪切光标之前的所有字符 ctrl+y[Y]:粘贴ct ...
- Django框架----路由系统(详细)
Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. ...
- Kattis之旅——Chinese Remainder
Input The first line of input consists of an integers T where 1≤T≤1000, the number of test cases. Th ...
- BIOS备忘录之通过Windbg来追踪ASL code的运行
通过Windbg来追踪ASL code的运行: 目标机的配置: 第一步: 在BIOS Setup下面 disable secure boot(不然下面debug on 命令会失败):关闭防火墙. 第二 ...
- Mac配置java运行环境的步骤
官网下载地址:jdk1.8版本的 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...
- ubuntu文件名乱码convmv和iconv
sudo apt install convmv sudo convmv -f gbk -t utf- -r --notest /home/pm/Desktop/p Linux下两个工具convmv和i ...
- Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系
Python3 freetds.conf odbcinst.ini odbc.ini 之间的关系 三者分别是FreeTDS和UnixODBC的配置文件: 1,FreeTDS中的freetds.conf ...
- 牛客网数据库SQL实战(6-10)
6.查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT NULL ...
- Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password
Centos7.5 执行ansible命令报错 问题: [root@m01 ~]# ansible servers -a "hostname" -i ./hosts -u root ...