`
我是温浩然
  • 浏览: 104203 次
文章分类
社区版块
存档分类
最新评论

easyui 生成 多级 菜单树 01

 
阅读更多

这篇博客,算是 爬坑总结,如果想直接看成功 的方案,请看 下一篇博客。

本来打算复制数据的,但是看了一下,数据没啥用,还特别多,如果你真的需要看这些数据,可以单独找我,QQ:1286238812 ,备注 csdn easyui tree . 放心,这些数据 不涉及公司机密。

数据结构如图下:



然后,先说,最开始 想通过 js 生成 菜单树的思路。

在 打算 在 页面 的js 中,通过 ajax 请求,获取 所有 菜单结构数据的集合,通过 js 来 循环遍历,生成带有多级菜单结构的树。 因为这个算是错误案例,所以不贴代码,只粘图

js 代码如图下:



basejs.jsp ,即为项目 的引入 文件,文件内容全部是引入的js ,以及 css 样式。

get MenuList 方法,为 访问后台数据,拼接html 代码的方法。

具体方法如下:

function createMenuListParent(resourceData,html,ticket){
	for(var [key,value] of resourceData){
		if(value.children.length > 0){
			html.push("");
			html.push("<li>");
			html.push("<span>" + value.name + "</span>");
			html.push("<ul>");
			var childrenList = value.children;
			for(var child of childrenList){
				createMenuListChild(child,html,ticket);
			}
			html.push("");
			html.push("</ul>");
			html.push("</li>");
		}else{
			html.push("<li>");
			var url = assemblyUrl(value, ticket);
			html.push("");
			html.push("<a href='###' onclick='addFrameTab(\""+ value.name +"\", \""+ url +"\")'>");
			html.push("<span style='cursor:pointer;'>" + value.name + "</span>");
			html.push("</a>");
			html.push("");
			html.push("");
			html.push("</li>");
		}
	}
}

function createMenuListChild(resourceData,html,ticket){
	if(resourceData.children !=null && resourceData.children.length > 0){
		html.push("");
		html.push("<li>");
		html.push("<span>" + resourceData.name + "</span>");
		html.push("<ul>");
		for(var child of resourceData.children){
			createMenuListChild(child,html,ticket);
		}
		html.push("");
		html.push("</ul>");
		html.push("</li>");
	}else{
		html.push("");
		html.push("<li>");
		var url = assemblyUrl(resourceData, ticket);
		html.push("");
		html.push("<a href='###' onclick='addFrameTab(\""+ resourceData.name +"\", \""+ url +"\")'>");
		html.push("<span style='cursor:pointer;'>" + resourceData.name + "</span>");
		html.push("</a>");
		html.push("");
		html.push("");
		html.push("</li>");
	}
}


function getMenuList(roleId, sysId, ticket) {
	$.ajax({
		"dataType" : 'json',
		"type" : 'POST',
		"url" : basePath + '/pages/frame/getResourceZTreeByRoleId',
		"data" : {
			'sysId' : sysId,
			'roleId' : roleId
		},
		"async" :true,
		"success" : function(response) {
			if (response.isSuccess == "true") {
				var html = [];
				var resourceData = new Map();
				var resourceListData = new Map();
				var resourceList = response.aaData;
				if (resourceList != null) {
					for (var i = 0; i < resourceList.length; i++) {
						var resource = resourceList[i];
						resourceListData.set(resource.id, resource);
					}
				}
				if (resourceList != null) {
					for (var i = 0; i < resourceList.length; i++) {
						var resource = resourceList[i];
						
						if (resource.parentResourceId == null || resource.parentResourceId == "") {
							if(resource.children === undefined || resource.children == 0){
								resource.children = [];
							}
							resourceData.set(resource.id, resource);
						}else{
							var parentResource = resourceData.get(resource.parentResourceId);
							if (parentResource != null) {
								parentResource.children.push(resource);
							}else{
								var parentResource2 = resourceListData.get(resource.parentResourceId);
								if(parentResource2.children === undefined || parentResource2.children.length == 0){
									parentResource2.children = [];
								}
								 
								parentResource2.children.push(resource);
							}
						}
					}
				}
				if(resourceData.size > 0){
					createMenuListParent(resourceData,html,ticket);
				}else{
					html.push("<li iconCls=\"\">");
					html.push("<span>无权限</span> ");
					html.push("<ul>");
					html.push("");
					html.push("</ul>");
					html.push("</li>");   
				}
				
				var defaultResourceName = null;
				var defaultResourceUrl = null;
				//var resources = resourceData.values();
				
				$("#dtree").html(html.join(""));
				console.log(html.join(""));
				//addFrameTab(defaultResourceName, defaultResourceUrl);
			} else {
				alertMsg('alertModal', 'alertMsg', response.msg);
				window.location.href = basePath + response.url;
			}
		},
		"error" : function(response) {
			window.location.href = basePath ;
		}
	});
}

assemblyUrl 方法是,拼接 url + ticket (ticket 为 登录验证生成的随机数) ,生成访问路径 的方法。

$("#dtree") ,是 上一篇博客介绍的 tree

当前ajax 请求,对应的后台方法是:

public ResourceForm getResourceZTreeByRoleId(HttpServletRequest request,HttpServletResponse response, ResourceForm form) throws Exception{
		try {
			String ticket = (String) request.getSession().getAttribute("ticket");
			Map<String,Object> resourceCondition = new HashMap<String,Object>();
			resourceCondition.put("sysId", form.getSysId());
			resourceCondition.put("roleId", form.getRoleId());
			List<SysResource> resourceList = sysResourceService.getResourceListByRoleId(resourceCondition);
			for(SysResource list : resourceList){
				list.setComponent(this.sysComponentService.getComponentById(list.getComponentId()));
				list.setSystem(this.sysSystemService.getSystemById(list.getSystemId()));
			}
			MenuResourceList.put(ticket, resourceList);
			form.setAaData(resourceList);
			form.setIsSuccess(SUCCESS);
		} catch (Exception e) {
			form.setIsSuccess(FAILURE);
			form.setMsg((e instanceof WebgateException) ? "" : e.getMessage());
		}
		return form;
	}

其中,sysId , 为,系统ID。 菜单树结构,必须属于某个系统。

roleId ,为,角色ID。根据角色,显示 菜单链接。


这个js 方法,生成的 html 如下:

<li><span>系统管理</span><ul><li><span>系统信息</span><ul><li><span>三级菜单</span><ul><li><a href='###' onclick='addFrameTab("四级菜单", "http://127.0.0.1:8080/webgate/pages/system/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>四级菜单</span></a></li></ul></li></ul></li><li><a href='###' onclick='addFrameTab("资源信息", "http://127.0.0.1:8080/webgate/pages/resource/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>资源信息</span></a></li><li><span>账户信息</span><ul><li><a href='###' onclick='addFrameTab("三级菜单2", "http://127.0.0.1:8080/webgate/pages/system/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>三级菜单2</span></a></li></ul></li><li><a href='###' onclick='addFrameTab("角色信息", "http://127.0.0.1:8080/webgate/pages/role/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>角色信息</span></a></li><li><a href='###' onclick='addFrameTab("组件信息", "http://127.0.0.1:8080/webgate/pages/component/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>组件信息</span></a></li><li><a href='###' onclick='addFrameTab("模块信息", "http://127.0.0.1:8080/webgate/pages/module/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>模块信息</span></a></li><li><a href='###' onclick='addFrameTab("功能信息", "http://127.0.0.1:8080/webgate/pages/function/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>功能信息</span></a></li></ul></li><li><a href='###' onclick='addFrameTab("一级菜单", "http://127.0.0.1:8080/webgate/pages/system/form/index?ticket=1489622475604_0.5272848774602615&pt_rtype=m")'><span style='cursor:pointer;'>一级菜单</span></a></li>

此html 拼接到页面上,显示的是错误的。错误原因,上一篇博客已经说过:http://blog.csdn.net/u012246342/article/details/62443719

但是,如果把这段html,直接复制到 页面上,并不通过js 加载,样式就是正确的。详情请看上一篇博客。


下一篇博客来写,正确的 生成 easyui 树菜单 的方法。

分享到:
评论

相关推荐

    easyUI递归生成菜单树

    2. 使用EasyUI生成菜单树: 在HTML中,我们需要一个`div`元素作为菜单树的容器,然后通过JavaScript调用`$.fn.menu`方法初始化菜单。在创建菜单时,我们可以传递一个JSON数据数组,EasyUI会根据数据自动生成菜单树...

    利用jQuery-Easyui 1.2实现多级折叠菜单代码.rar

    通过查看和学习这个示例,你可以了解到如何将jQuery EasyUI的 `menu` 组件应用于实际项目,为你的网页添加交互性和美观的多级菜单。 总的来说,jQuery EasyUI 提供的 `menu` 组件简化了多级折叠菜单的实现,让...

    easyui-tree多级菜单并动态与数据库交互

    在本项目中,我们主要探讨的是如何利用EasyUI框架创建一个具有多级菜单功能的树形结构,并且能够与后台数据库进行动态交互。EasyUI是一个基于jQuery的UI库,提供了丰富的组件,包括我们这里用到的树形控件(tree)。...

    EasyUI 多层导航框架

    在描述中提到,这个框架实现了多导航功能,这意味着用户可以通过多级菜单结构来访问不同的功能模块,使得复杂的应用程序界面变得有序且易于理解。EasyUI的`easyui-accordion`和`easyui-tree`组件在其中起到了关键...

    jQuery动态菜单列表(树)

    本文将详细讲解如何使用jQuery实现动态菜单列表(树)以及与layui、easyui等前端框架的整合。 jQuery是一款轻量级、高性能的JavaScript库,它简化了DOM操作、事件处理和动画效果,使得开发者可以更加便捷地实现复杂...

    js菜单可以动态生成

    例如,我们可以创建新的`&lt;ul&gt;`和`&lt;li&gt;`元素,构建一个多级菜单的结构。在JavaScript中,这可以通过`document.createElement()`、`appendChild()`等方法实现。 ```javascript var menu = document.createElement('ul...

    jquery-easyui-1.3.2

    3. 菜单(Menu):EasyUI的菜单系统支持多级下拉,为网站或应用的导航提供直观的用户界面。开发者可以通过简单的JSON结构定义菜单内容,实现动态生成和响应式布局。 4. 表单(Form):jQuery EasyUI的表单组件提供...

    jquery EasyUI 1.4.3奇葩案例代码

    #### 案例一:动态加载的多级菜单 在某些项目中,需要根据用户权限动态生成菜单结构。利用EasyUI的`menu`组件和Ajax请求,可以实现菜单的动态加载和更新。 #### 案例二:自定义验证的表单 EasyUI的`form`组件支持...

    超漂亮的easyui前端模板源码(二)

    1. **EasyUI 框架**:EasyUI 是一个轻量级的前端框架,它基于 jQuery 并集成了多种组件,如对话框、表格、树形视图、下拉菜单等,帮助开发者快速构建用户界面。其核心特点在于简洁的 API 和一致的设计风格,使得代码...

    easyUI+shior+JSON格式化显示

    在“菜单栏分两级”的场景中,EasyUI的菜单组件可以方便地创建一个多级导航菜单,允许用户通过简单的HTML和CSS配置实现复杂的布局。此外,EasyUI还支持响应式设计,使得应用能在不同设备上自适应显示。 接下来,...

    jquery_easyUI_demo

    EasyUI的菜单支持多级结构,可以静态定义也可以动态生成。"jquery_easyUI_demo"会展示如何构建和控制菜单的显示。 此外,树形结构(Tree)在展示层次信息时非常有用。EasyUI的树组件支持拖放、展开/折叠节点等功能...

    jQuery-Easyui 1.2 实现多层菜单效果的代码

    - `menus`属性:允许在菜单项中再嵌套数组,实现多级菜单功能。 - `menu('getSelected')`方法:可以获取到当前选中的菜单项。 - `menu('getActiveItem')`方法:可以获取当前展开的菜单项。 知识点六:多层菜单效果...

    easyui 1.6.2

    5. **菜单(Menu)**:可生成多级菜单,用于构建清晰的导航结构。 6. **树形控件(Tree)**:用于显示层级关系的数据,支持节点的展开、折叠、选择等操作。 7. **按钮(Button)**:包括普通按钮、复选按钮、单选...

    jquery-easyui-1.2.3.zip

    - **组件化**:EasyUI 提供了如对话框、表单、菜单、树形结构、表格等众多组件,每个组件都有其特定的功能,可方便地嵌入到网页中。 - **响应式设计**:框架内置了对不同屏幕尺寸的支持,帮助开发者创建适应各种...

    ajax获取后台菜单数据

    Accordion控件,通常在EasyUI或jQuery UI等库中提供,是一种折叠面板布局,常用于显示多级菜单或多个可展开/折叠的内容区域。在本例中,前台接收到的后台菜单数据会被转化为Accordion控件的结构,用户可以通过展开和...

    C#构建树形结构数据(全部构建,查找构建)

    最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件。 一、遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度也并不快; 二、解决方法 1、...

    jQuery Easyui Tabs扩展根据自定义属性打开页签

    - content:根据url加载的内容生成的函数,通常会调用createTabContent函数来处理内容的创建。 - url:指向页签内容的地址。 函数createTabContent用于根据提供的url和高度(h)来创建页签内容,但是这部分代码在...

    jqueryeayui API

    - **菜单(Menu)**:用于创建多级下拉菜单,方便用户操作。 - **树形控件(Tree)**:展示层次结构的数据,支持展开/折叠、选择节点等操作。 - **按钮(Button)**:基础的点击元素,可以定义文字、图标和事件。 - **...

Global site tag (gtag.js) - Google Analytics