`
paladin1988
  • 浏览: 326357 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转载】ExtJS--根据用户权限动态创建菜单树

 
阅读更多

 

 

来源:http://3ccoder.iteye.com/blog/556668

作者:yadsun

 

 

 

 

服务器端方法

 

public File writeJason(){
	final List<ADAuthority> allMenus = securityManager.getUserMenuTree(); //根据用户ID从数据库读出用户的所有权限
	final List<ADAuthority> leafs = new LinkedList<ADAuthority>(allMenus);//有顺序的list
				List<ADAuthority> roots = new LinkedList<ADAuthority>();//把所有根节点取出,这里的根不是Ext.tree.TreePanel里的root而是它的一级子节点
				for (ADAuthority menu : allMenus) {
					if (menu.getLevel() == 1) {
						roots.add(menu);
						leafs.remove(menu);
					}
				}
				List<Map<ADAuthority, List>> results = new LinkedList();
				for(ADAuthority root : roots){
					Map<ADAuthority,List> m = getDeepChildren(root, leafs);
					results.add(m);
				}
				String s = Map2Json(results);
	      //将s写入服务器端.json文件
}


    /*
     * 递归方法
	 * 传一个根节点和其他所有节点的集合
	 * 根据根结点遍历其下的所有子结点
	 */
	public static Map<ADAuthority,List> getDeepChildren(ADAuthority root, List<ADAuthority> leafs){
		Map<ADAuthority,List> singleTree = new HashMap<ADAuthority,List>();//用来存放根和其下所有的子
		List<Map<ADAuthority,List>> singleLeafs = new LinkedList<Map<ADAuthority,List>>();
		List<ADAuthority> copyLeafs =  new LinkedList<ADAuthority>(leafs);
		for(ADAuthority leaf : leafs){
			if (leaf.getParentRrn() == null){
				copyLeafs.remove(leaf);
				continue;
			} else if(leaf.getParentRrn().equals(root.getObjectRrn())){
				copyLeafs.remove(leaf);
				singleLeafs.add(getDeepChildren(leaf,copyLeafs));
			}
		}
		singleTree.put(root, singleLeafs);
		return singleTree;
	}


    /*
	 * 递归方法
	 * 将生成的特定List转成json格式数据
	 */
	public static String Map2Json(List<Map<ADAuthority, List>> source){
		StringBuffer sb = new StringBuffer();
		int time = 0;
		for(Map<ADAuthority, List> tree : source){
			for(ADAuthority key : tree.keySet()){
				List<Map<ADAuthority,List>> l = tree.get(key);
				if(time++ > 0) sb.append(",");//json的格式,用","分隔每一组{},最后面的一组没有","
				sb.append("{'text': '" + key.getLabel_zh() + "',");
				sb.append("'cls': 'floder'");
				if(l.size() != 0){
					sb.append(",'children': [" + Map2Json(l) + "]");
				}else{
					sb.append(",'leaf': true");
				}
				sb.append("}");
			}
		}
		return sb.toString();
	}

 

 

menutree.html内容

 

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <!--引入ext样式表-->
    <link rel="stylesheet" type="text/css" href="../extjs/resources/css/ext-all.css" />
    <!--引入ext适配器脚本-->
    <script type="text/javascript" src="../extjs/adapter/ext/ext-base.js"></script>
    <!--引入ext框架脚本-->
    <script type="text/javascript" src="../extjs/ext-all-debug.js"></script>
    <script type="text/javascript" src="../js/tree.js"></script>
    <title>Tree of ExtJS</title>
    </head>
    <body>
    <div id="menu"></div>
    </body>
    </html>
 

 

menutree.js内容

 

    Ext.onReady(function(){
        var tree = new Ext.tree.TreePanel({
                    renderTo: 'menu',
                    useArrows: true,
                    autoScroll: true,
                    animate: true,
                    enableDD: true,
                    containerScroll: true,
                    border: false,
                    root: {
                        text:'Function List',
                        nodeType: 'async',
                        draggable: false,
                        id: 'source'
                    },
                    rootVisible:true,
                    
                    // auto create TreeLoader
                    dataUrl: '../js/nodes.json'
                });

        tree.getRootNode().expand(true);
    });
 

 

 

分享到:
评论

相关推荐

    tree 动态树 extjs ajax

    总的来说,通过理解并熟练运用这些知识点,开发者可以创建出交互性强、性能优秀的动态树视图,适用于各种需要展现层级结构数据的场景,如组织架构、文件系统、菜单导航等。同时,与Ajax的结合使用,使得这种视图在...

    Extjs4.2 动态加载项目(权限模块)

    - **路由(Routing)**:根据用户权限动态调整导航路径。 通过使用这些组件和机制,开发者可以构建出灵活且安全的Web应用。项目提供的"project"文件很可能包含了完整的示例代码,包括配置文件、JavaScript源码、样式...

    extjs 权限 c# oa

    3. **前端权限处理**:EXTJS接收到这些数据后,根据角色和权限设置前端界面的可见性和可操作性。例如,通过监听菜单项的点击事件,判断当前用户是否有权执行相应操作;或者动态加载面板内容,只显示用户有权访问的...

    EXTJS4 菜单栏

    这使得菜单栏可以根据用户权限或应用状态进行实时更新。 6. **事件处理**:EXTJS4的菜单项支持多种事件,如`click`、`mouseover`等。你可以通过监听这些事件来实现交互逻辑。 ```javascript item1.on('click', ...

    SSH+Extjs4 0实现的权限管理系统 基于角色的权限设计

    4. 菜单管理:根据权限设置,动态生成用户可见的菜单,实现权限控制的细粒度。 5. 登录认证:使用SSH框架的Spring Security模块,实现用户登录验证和权限校验。 数据库设计方面,可能包含用户表(User)、角色表...

    ExtJS5.0 树形菜单实例

    下面我们将深入探讨如何利用ExtJS 5.0 创建一个树形菜单实例。 1. **TreePanel 基础** TreePanel 是ExtJS 中用于展示树状数据的组件,它允许用户展开和折叠节点,进行选择和编辑操作。创建一个TreePanel 需要定义...

    extjs4-ssi

    在这里,管理员可以创建、修改和删除菜单项,设置菜单的层级关系,以及与角色权限的对应关系,确保用户只能看到和操作他们被授权的菜单项。 4. **单点登录(SSI)**:实现跨系统的身份验证,用户只需要登录一次,就...

    extjs目录树编辑

    9. **权限控制**:在实际应用中,可能需要根据用户角色限制其对树的编辑操作。这可以通过在工具类中添加权限检查逻辑,或者在事件处理器中进行判断来实现。 通过上述知识点,我们可以理解EXTJS目录树编辑的核心概念...

    ExtJs菜单导航功能,不在用左边功能树

    在ExtJs开发中,构建用户界面时,菜单导航是一个至关重要的元素,它为用户提供了一种直观的方式来探索和操作应用的功能。传统的Web应用中,菜单通常会以树状结构出现在页面的左侧,但随着设计趋势的变化和技术的发展...

    extjs6.2 admin-dashboard模板

    - 用户权限:提供基础的权限管理,可以设置不同的用户访问权限。 3. **使用指南**: - 安装:首先确保已经安装了ExtJS 6.2的开发环境,包括SDK和构建工具。 - 引入模板:将下载的admin-dashboard文件解压,并在...

    extjs4-ssi例子

    6. 动态菜单:学习创建响应式菜单,根据用户角色和权限动态调整显示内容。 7. 报表设计:探索如何使用ExtJS的图表和表格组件生成具有交互性的数据报告。 通过这个例子,开发者不仅可以学习到ExtJS 4的基础知识,还...

    ExtJS4 2学习 21 动态菜单与表格数据展示操作总结篇

    动态菜单在Web应用中广泛用于导航,它允许根据用户权限、状态或其他条件动态生成菜单项。在ExtJS4.2中,我们可以使用`Ext.menu.Menu`类来创建菜单,并通过监听事件或异步请求来更新菜单内容。例如,我们可以通过以下...

    springmvc+mybatis+Extjs权限

    在权限管理中,MyBatis可以帮助我们处理用户角色与权限的数据存储和查询,例如,通过SQL查询获取某个用户所具备的所有权限,或者根据用户权限动态生成SQL来限制其数据访问范围。 **ExtJS** ExtJS是一个用于构建富...

    Extjs4.1 系统框架 集成权限操作流程和页面

    2. **动态渲染**:使用ExtJS的条件渲染功能,可以根据用户权限动态地显示或隐藏页面元素。例如,使用`xif`属性或`tpl`中的条件判断来控制组件的可见性。 3. **路由与权限**:结合ExtJS的路由功能,可以实现基于权限...

    extjs实现权限拦截

    在登录验证成功后,后端返回的权限信息可以通过ExtJS的数据绑定机制,更新UI元素的显示状态,如菜单、按钮等,实现动态权限展示。 5. **路由拦截** 在现代前端应用中,路由管理是关键。ExtJS的`Ext.Router`可以...

    A013 Extjs FineUI通用权限框架

    3. **菜单(Menu)与导航**:权限框架通常会根据用户的角色分配来动态生成菜单,只显示用户有权访问的部分。这有助于减少复杂应用的混乱,提升用户体验。 4. **角色分配(Role Assignment)**:管理员可以将角色...

    002 基于ssm+extjs整合的菜单权限管理系统

    通过阅读源码,我们可以深入了解系统如何实现菜单的动态加载、权限的判断以及用户角色的管理等功能。 总的来说,这个项目展示了如何使用SSM和ExtJS构建一个完整的菜单权限管理系统,涵盖了后端服务、数据存储和前端...

    无废话ExtJs 系列教程十五[树:TreePanel]

    - 菜单系统:生成动态菜单,根据用户权限展示不同级别的菜单项。 通过学习这个系列教程,你将掌握如何创建、配置和操作TreePanel,从而在你的应用程序中有效地利用这种强大的组件。对于深入理解ExtJs的使用和开发...

    Extjs4下的STOREMENU

    在ExtJS 4中,STOREMENU 是一种特定的功能,它将数据存储(Store)与菜单(Menu)相结合,提供了一种动态创建菜单项的方法,这些菜单项可以根据存储的数据进行更新。这种功能在需要根据用户权限或实时数据动态展示...

Global site tag (gtag.js) - Google Analytics