管理后台菜单工具条动态化

管理后台的菜单链接需要从数据库表中动态生成,当新模块开发出来后通过菜单将新模块挂载到主界面上,菜单工具条根据当前登录用户的角色过滤菜单功能集合,也就是说不同用户登录系统展现的菜单是不同的,菜单是一树状结构,我们需要设计一张树状结构的表存储菜单,当用户登录时根据权限过滤菜单功能列表

表的结构如下:
每条记录需要记录其父记录的ID,如果是根记录,父ID为null
id int 主键
name varchar(100) 菜单名称
url varchar(100) 菜单对应功能模块的URL
parentid int 父记录的ID
path varchar(500) 记录的Path路径

设计Java实体类

package com.hk.bean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class FunctionInfo implements java.io.Serializable{
	private String id = null;
	private String name = null;
	private String url = null;
	private String parentId = null;
	private String path = null;
	private String flag = null;
	//当前模块下所有的一级子模块
	private List<FunctionInfo> child = new ArrayList<FunctionInfo>();
	//当前模块所拥有的权限列表,在权限过滤时使用
	private List<Permission> permList = new ArrayList<Permission>();
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUrl() {
		return url;
	}
	public void setUrl(String url) {
		this.url = url;
	}
	public String getParentId() {
		return parentId;
	}
	public void setParentId(String parentId) {
		this.parentId = parentId;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public String getFlag() {
		return flag;
	}
	public void setFlag(String flag) {
		this.flag = flag;
	}
	public List<FunctionInfo> getChild() {
		return child;
	}
	public void setChild(List<FunctionInfo> child) {
		this.child = child;
	}
	public void addFunction(FunctionInfo fi)
	{
		if(child == null)
			child = new ArrayList<FunctionInfo>();
		child.add(fi);
	}
	public List<Permission> getPermList() {
		return permList;
	}
	public void setPermList(List<Permission> permList) {
		this.permList = permList;
	}
	public void addPermList(Permission perm)
	{
		if(permList == null)
			permList = new ArrayList<Permission>();
		permList.add(perm);
	}
}

前台展现菜单工具条,我们需要借助Easyui的menu控件
在这里插入图片描述

前端生成菜单的HTML代码

			<!-- 根据后台动态生成功能菜单 -->
		<div class="easyui-panel" style="padding-bottom:0px;background:#B3DFDA;">
			<a class="easyui-menubutton" data-options="menu:'#0'">系统管理</a>
			<a class="easyui-menubutton" data-options="menu:'#1'">微信管理</a>
			<a class="easyui-menubutton" data-options="menu:'#2'">网上办公</a>
			<a class="easyui-menubutton" data-options="menu:'#3'">财务管理</a>
			<a class="easyui-linkbutton" data-options="plain:true" onclick="javascript:logout()">退出系统</a>
		</div>
		<div id="0" style="width:150px;">
			<div>
				<span>组织机构</span>
				<div>
					<div onclick="javascript:addTab('011','部门管理','?jsessionid=80449683B37933FF74772662A5DDFBAA')">部门管理</div>
					<div onclick="javascript:addTab('012','用户管理','?jsessionid=80449683B37933FF74772662A5DDFBAA')">用户管理</div>
					
					<div>
						<span>角色管理</span>
						<div>
							<div onclick="javascript:addTab('013','功能角色','?jsessionid=80449683B37933FF74772662A5DDFBAA')">角色管理</div>
							<div onclick="javascript:addTab('013','内容角色','?jsessionid=80449683B37933FF74772662A5DDFBAA')">角色管理</div>
						</div>
					</div>
				</div>
			</div>
		</div>
		<div id="1" style="width:150px;">
			<div onclick="javascript:addTab('11','实体店','/wxshop?jsessionid=80449683B37933FF74772662A5DDFBAA')">实体店</div>
			<div onclick="javascript:addTab('12','活动管理','/wxact?jsessionid=80449683B37933FF74772662A5DDFBAA')">活动管理</div>
		</div>
		<div id="2" style="width:150px;">
		</div>
		<div id="3" style="width:150px;">
		</div>

在这里插入图片描述
生成上述菜单的HTML代码需要使用Java的递归函数遍历树状数据结构生成。递归函数是自身调用自身,所以最后一定要设置一个递归函数的出口,否则会进入无限循环调用,最终导致Java的栈溢出。

比如求10的阶乘,最终的出口是1的阶乘等于1,也就是说计算10的阶乘,必须首先计算9的阶乘;计算9的阶乘,必须首先计算8的阶乘,最终一直在到1的阶乘等于1是递归函数的出口。

10!=10 x 9! = 10 x 9 x 8!=…=10x9x8x7x6x5x4x3x2x 1!

我们递归遍历表的数据,出口是当某条记录没有子记录时是递归调用的出口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值