来源: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);
});
分享到:
相关推荐
总的来说,通过理解并熟练运用这些知识点,开发者可以创建出交互性强、性能优秀的动态树视图,适用于各种需要展现层级结构数据的场景,如组织架构、文件系统、菜单导航等。同时,与Ajax的结合使用,使得这种视图在...
- **路由(Routing)**:根据用户权限动态调整导航路径。 通过使用这些组件和机制,开发者可以构建出灵活且安全的Web应用。项目提供的"project"文件很可能包含了完整的示例代码,包括配置文件、JavaScript源码、样式...
3. **前端权限处理**:EXTJS接收到这些数据后,根据角色和权限设置前端界面的可见性和可操作性。例如,通过监听菜单项的点击事件,判断当前用户是否有权执行相应操作;或者动态加载面板内容,只显示用户有权访问的...
这使得菜单栏可以根据用户权限或应用状态进行实时更新。 6. **事件处理**:EXTJS4的菜单项支持多种事件,如`click`、`mouseover`等。你可以通过监听这些事件来实现交互逻辑。 ```javascript item1.on('click', ...
4. 菜单管理:根据权限设置,动态生成用户可见的菜单,实现权限控制的细粒度。 5. 登录认证:使用SSH框架的Spring Security模块,实现用户登录验证和权限校验。 数据库设计方面,可能包含用户表(User)、角色表...
下面我们将深入探讨如何利用ExtJS 5.0 创建一个树形菜单实例。 1. **TreePanel 基础** TreePanel 是ExtJS 中用于展示树状数据的组件,它允许用户展开和折叠节点,进行选择和编辑操作。创建一个TreePanel 需要定义...
在这里,管理员可以创建、修改和删除菜单项,设置菜单的层级关系,以及与角色权限的对应关系,确保用户只能看到和操作他们被授权的菜单项。 4. **单点登录(SSI)**:实现跨系统的身份验证,用户只需要登录一次,就...
9. **权限控制**:在实际应用中,可能需要根据用户角色限制其对树的编辑操作。这可以通过在工具类中添加权限检查逻辑,或者在事件处理器中进行判断来实现。 通过上述知识点,我们可以理解EXTJS目录树编辑的核心概念...
在ExtJs开发中,构建用户界面时,菜单导航是一个至关重要的元素,它为用户提供了一种直观的方式来探索和操作应用的功能。传统的Web应用中,菜单通常会以树状结构出现在页面的左侧,但随着设计趋势的变化和技术的发展...
- 用户权限:提供基础的权限管理,可以设置不同的用户访问权限。 3. **使用指南**: - 安装:首先确保已经安装了ExtJS 6.2的开发环境,包括SDK和构建工具。 - 引入模板:将下载的admin-dashboard文件解压,并在...
6. 动态菜单:学习创建响应式菜单,根据用户角色和权限动态调整显示内容。 7. 报表设计:探索如何使用ExtJS的图表和表格组件生成具有交互性的数据报告。 通过这个例子,开发者不仅可以学习到ExtJS 4的基础知识,还...
动态菜单在Web应用中广泛用于导航,它允许根据用户权限、状态或其他条件动态生成菜单项。在ExtJS4.2中,我们可以使用`Ext.menu.Menu`类来创建菜单,并通过监听事件或异步请求来更新菜单内容。例如,我们可以通过以下...
在权限管理中,MyBatis可以帮助我们处理用户角色与权限的数据存储和查询,例如,通过SQL查询获取某个用户所具备的所有权限,或者根据用户权限动态生成SQL来限制其数据访问范围。 **ExtJS** ExtJS是一个用于构建富...
2. **动态渲染**:使用ExtJS的条件渲染功能,可以根据用户权限动态地显示或隐藏页面元素。例如,使用`xif`属性或`tpl`中的条件判断来控制组件的可见性。 3. **路由与权限**:结合ExtJS的路由功能,可以实现基于权限...
在登录验证成功后,后端返回的权限信息可以通过ExtJS的数据绑定机制,更新UI元素的显示状态,如菜单、按钮等,实现动态权限展示。 5. **路由拦截** 在现代前端应用中,路由管理是关键。ExtJS的`Ext.Router`可以...
3. **菜单(Menu)与导航**:权限框架通常会根据用户的角色分配来动态生成菜单,只显示用户有权访问的部分。这有助于减少复杂应用的混乱,提升用户体验。 4. **角色分配(Role Assignment)**:管理员可以将角色...
通过阅读源码,我们可以深入了解系统如何实现菜单的动态加载、权限的判断以及用户角色的管理等功能。 总的来说,这个项目展示了如何使用SSM和ExtJS构建一个完整的菜单权限管理系统,涵盖了后端服务、数据存储和前端...
- 菜单系统:生成动态菜单,根据用户权限展示不同级别的菜单项。 通过学习这个系列教程,你将掌握如何创建、配置和操作TreePanel,从而在你的应用程序中有效地利用这种强大的组件。对于深入理解ExtJs的使用和开发...
在ExtJS 4中,STOREMENU 是一种特定的功能,它将数据存储(Store)与菜单(Menu)相结合,提供了一种动态创建菜单项的方法,这些菜单项可以根据存储的数据进行更新。这种功能在需要根据用户权限或实时数据动态展示...