ITOO-EasyUI动态菜单加载

在ITOO中,我们的右上角有几个菜单,一直想把它做成类似今目标的存在,后台可以配置 。时至今日,终于成功了,下面是我的一点思路:

根据EasyUI中菜单按钮的加载Demo,如下,可以看出菜单的加载实现方式:

// 这里显示的相当于上方的图片
<a href="#" class="easyui-menubutton" data-options="menu:'#mm2',iconCls:'icon-edit'">Edit</a>
// 这里显示的主菜单下的子模块
<div id="mm2" style="width:100px;">
	<div>Help</div>
	<div>Update</div>
	<div>About</div>
</div>

菜单通过menu属性来加载其子模块,通过iconCls属性显示不同的图标。那么思路就是拼接这样的样式即可。在前台中,我通过页面加载完成后ajax同步调用controller查询系统及模块级别的菜单,放入到html的div中。

1.html

		<div id="aa">

		</div>

2.js。

页面加载完成后,通过js调用后台,然后根据查询出的系统和模块的json,append到这个div中。

	$(function(){
		// 页面加载的时候调用,查询系统的模块
   		$.ajax({
                   type: "GET",
                   url: 'getSystem',
                   data: {},
                   dataType: "html",
                   success: function(data){
            	       $('#aa').append(data);
            	       $.parser.parse('#aa');
                   }
   		});
      })

这里通过$.parser.parse(‘#aa‘)这句话,可以重新解析页面,这里解析的是div标签 内容,使其可以有css的样式,相当于一个布局的刷新。

3.Controller层

controller层主要是拼接需要的字符串,首先查询系统级别的,然后循环根据系统的id去查询各模块下的内容。

/**
	 * 查询系统的列表框
	 * @param response
	 */
	@RequestMapping("/getSystem")
	public void getTrendsLink(HttpServletResponse response){
		List<Application> systemList=new ArrayList<Application>();
		String strStyle ="";
		String total ="";
		systemList = applicationBean.queryParentApplication();
		if(systemList.size() < 1 || systemList == null){
			JsonUtils.outJson(response, "");
		}else{
			strStyle +="<div style=\"float:right; margin-right:4%; margin-top:15px;\">";
			for(int i =0;i<systemList.size();i++){
				Application app =(Application)systemList.get(i);
				//步骤1:拼接系统最外层的div标签
				strStyle += "<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" style=\"width:46px; height:56px;margin-left:4px;\" data-options=\"size:'large',iconCls:'"+app.getId()+"',iconAlign:'top',plain:false,menu:'#"+app.getId()+"'\">"+ app.getApplicationName().substring(0,2) +"</a>";

				System.out.print(app.getId());

				total += "<div id=\""+app.getId()+"\" style=\"display: none\">";		

				total += getChildLink(app.getId(),app.getApplicationName());

				total += "</div>";

			}
			strStyle += "<a href=\"javascript:void(0)\" class=\"easyui-menubutton\" style=\"width: 46px; height: 56px;margin-left:4px;\" data-options=\"size:'large',iconCls:'icon-helpload',iconAlign:'top',plain:false\" onclick=\"javascript:$('#pg').pivotgrid('layout')\">帮助</a></div>";
		}

		 System.out.println(strStyle+total);
		JsonUtils.outJson(response,strStyle+total );//strStyle+total
	}

	/**
	 * 查询系统下的模块
	 * @param parentId 系统id
	 * @param name  系统名称
	 * @return  String字符串
	 */
	public String getChildLink(String parentId,String name){
	//	<div onclick="addTab('基础系统-专业分流管理','http://192.168.24.246:8091/itoo-basic-professional-web/toProfessionalList?id=DxdYBwWuz12MsPEnJdGksk')">专业分流管理</div>
		String total ="";
		List<Application> childList=new ArrayList<Application>();
		childList =applicationBean.queryApplicationByParentId(parentId);
		if(childList.size() < 1 || childList == null){
			return total;
		}else{
			// 步骤2:拼接各个子模块的div
			for(int i=0;i<childList.size();i++){
				Application app =(Application)childList.get(i);

				//步骤3: 判断模块下是否有其他页面,有——加上ID,没有则不加
				//if(getChildLink(app.getId(),app.getApplicationName()) !=""){
					//步骤3.1 拼接加上id
					total += "<div onclick=\"addTab('"+ name+'-'+app.getApplicationName() +"','"+app.getApplicationUrl()+"?id="+app.getId()+"')\">"+app.getApplicationName()+"</div>";
			//	}else{
					//步骤3.2 拼接不加id
			//		total += "<div onclick=\"addTab('"+ name+'-'+app.getApplicationName() +"','"+app.getApplicationUrl()+"')\">"+app.getApplicationName()+"</div>";
			//	}
			}
		}
		return total;
	}

最后根据返回值到ajax的回调函数中,就完美解决了动态加载菜单的问题。这里有点烦的就是controller拼接字符串,需要步步调试到EasyUI需要的格式,细心点都可以成功。

后续我们会加上shiro标签来根据登录的用户角色来动态显示各系统,系统还在一步步完善中,2.0加油!

时间: 2024-12-16 04:58:32

ITOO-EasyUI动态菜单加载的相关文章

EasyUI 树形菜单加载父/子节点

通常表示一个树节点的方式就是在每一个节点存储一个 parentid. 这个也被称为邻接列表模型. 直接加载这些数据到树形菜单(Tree)是不允许的. 但是我们可以在加载树形菜单之前,把它转换为标准标准的树形菜单(Tree)数据格式. 树(Tree)插件提供一个 'loadFilter' 选项函数,它可以实现这个功能. 它提供一个机会来改变任何一个进入数据. 本教程向您展示如何使用 'loadFilter' 函数加载父/子节点到树形菜单(Tree). 父/子节点数据 [ {"id":1,

动态菜单加载过程

根据登录的userID查询出角色绑定的menucode,再查出所有菜单List<Module> 去除List<Module>中没有绑定的菜单 再将List<Module>建立成树形机构 在将list转为json格式字符串返回到前端 /** * 根据用户id获取module列表 * @param userId * @return * List<SysModule> */ public List<SysModule> selectModuleByUs

03 jquery easyui 之 easyLoader 加载器

EasyLoader 是可以加载CSS样式.脚本.动态加载easyui组件.需要使用到easyloader.js,就不使用jquery.easyui.min.js 加载 EasyUI 模块 easyloader.base = '../'; // 设置 easyui 的基本目录 easyloader.load('messager', function(){ // 加载指定的模块         $.messager.alert('Title', 'load ok'); }); 通过相对 url 加

JS获取图片的缩略图,并且动态的加载多张图片

找了好多资料也没有找到该死的ie的解决办法,最后放弃了ie <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js获取缩略图</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <st

nginx php动态编译加载模块.

#Nginx动态编译加载模块步骤 #查看目前Nginx版本及编译模块 #[[email protected] ~]# /opt/app/lnmp/nginx-1.12.0/sbin/nginx -V #nginx version: nginx/1.12.0 #built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) #built with OpenSSL 1.0.2k  26 Jan 2017 #TLS SNI support enabled #c

AutoSharedLibrary -- 基于模板元编程技术的跨平台C++动态链接加载库

基于模板元编程技术的跨平台C++动态链接加载库.通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销. ASL_LIBRARY_BEGIN(TestLib) ASL_SYMBOL(Proc_test1, test1, false) ASL_SYMBOL(Proc_test2, test2, true) ASL_LIBRARY_END() TestLib theLib; try { theLib.Load("./1.so"

esri-leaflet入门教程(5)- 动态要素加载

esri-leaflet入门教程(5)- 动态绘制图形 by 李远祥 在上一章节中已经说明了esr-leaflet是如何加载ArcGIS Server提供的各种服务,这些都是服务本身来决定的,API脚本只是非常简单的调用.但如果要做一列的地图交互操作或者动态渲染等,那就必须使用地图区域跳转.查询结果渲染.动态添加图形等多种交互手段.而这些交互手段基本上离不开一些非服务类型的数据加载,我们可以将其成为动态要素.动态要素一般是在页面端进行动态绘制的. 动态要素这一说法并不是ArcGIS 或者leaf

easyui的tab加载页面中的form重复提交

http://blog.csdn.net/fxz1982/article/details/8987769 Easyui中的tabs组件以href方式加载目标页面,如果目标页面中有dialog或者window这类的easyui组件中放了form.那么在关闭这个tab再次打开.如果进行form提交操作,后台就会收到两次提交请求,再次重复以上操作会收到3次提交请求,如果将表单serialize()后以jquery的post提交服务器将收到值全是数组方式组织的. 经分析发现,Easyui的tab加载页面

Bootstrap tab页的动态ajax加载

要实现这样的功能,点击tab导航ajax动态加载页面,当加载过之后,点击则不再重新加载,直接显示原来加载的页面. tab页面代码: <!-- Nav tabs --><ul class="nav nav-tabs" role="tablist" id="maintab">  <li class="active"><a href="#tab1"  onclick='s