`
刘长鸣
  • 浏览: 29640 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Extjs4 treePanel异步加载菜单(后台从数据库读取)

 
阅读更多

一、首先设计编写Menu实体类,存储每个菜单项的信息

  1.  实体类有四个私有属性,tid是自身的id,
  2. text就是菜单在页面显示的的数据,
  3. leaf就是是否为叶子节点,
  4. parentId为父亲节点的id

二、接下来设计数据库,插入数据(我用的是Oracle)

create table T_TREE
(
  t_id      VARCHAR2(10),
  text      NVARCHAR2(10),
  leaf      CHAR(1),
  parent_id VARCHAR2(10)
)
  1. 需要注意的就是实体类是boolean值的leaf在数据库中用CHAR(1)存储,值为0或1
  2. 然后插入数据
insert into T_TREE values('101','一级菜单1',0,null);
insert into T_TREE values('102','一级菜单2',0,null);
insert into T_TREE values('103','一级菜单3',0,null);
insert into T_TREE values('1001','二级菜单1',1,'101');
insert into T_TREE values('1002','二级菜单2',0,'102');
insert into T_TREE values('1003','二级菜单3',0,'102');
insert into T_TREE values('1004','二级菜单4',0,'103');
insert into T_TREE values('1005','二级菜单5',0,'103');
insert into T_TREE values('10001','三级菜单1',1,'1002');
insert into T_TREE values('10002','三级菜单2',1,'1002');
insert into T_TREE values('10003','三级菜单3',1,'1003');
insert into T_TREE values('10004','三级菜单4',1,'1003');
insert into T_TREE values('10005','三级菜单5',1,'1004');
insert into T_TREE values('10006','三级菜单6',1,'1004');
insert into T_TREE values('10007','三级菜单7',1,'1004');
insert into T_TREE values('10008','三级菜单8',1,'1005');
insert into T_TREE values('10009','三级菜单9',1,'1005');

 

三、设计dao层,由于我是使用Mybatis的,就把mapper文件的代码粘贴一下

  1. 主要的思路就是,根据父亲节点的id找到所对应的所有子节点
  2. 需要注意的是, <result property="leaf" column="leaf" javaType="Boolean" jdbcType="CHAR"/>这样的话,mybatis就会自动将数据库中的CHAR类型的leaf转化成布尔类型

 下面是dao层的代码

 IMenuDao是我写的一个dao接口,其实就是Service层调用Dao层接口,Action层再调用Service层接口

 

四、接下来编写界面js

Ext.onReady(function(){
	var store = Ext.create('Ext.data.TreeStore', {
		autoLoad : true,
		proxy : {
				type : 'ajax',
				url : 'menuAction!findLeaf',//请求
				reader : {
					type : 'json',
					root : 'menuList'//数据
				},
				//传参
				extraParams : {
					tid : ''
				}
			},
		root : {
			text : '管理菜单',
			expanded : true			
		},
		listeners : {
			'beforeexpand' : function(node,eOpts){
		//点击父亲节点的菜单会将节点的id通过ajax请求,将到后台
				this.proxy.extraParams.tid = node.raw.tid;
			}
		}
	});
	
	Ext.create('Ext.tree.Panel', {
		renderTo : Ext.getBody(),
		title : '动态加载TreePanel',
		width : 300,
		height : 500,
		useArrows : true,
		store : store
	});
});

 

首次加载的时候tid的值为空,所以就会从数据库把三个一级菜单查出来,

因为三个一级菜单的parent_id is null

 

五、最后编写Action

 在struts.xml和application.xml配置Action

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<package name="default" namespace="/" extends="json-default">
		<action name="menuAction" class="menuAction">
			<result name="findLeaf" type="json">
				<param name="includeProperties">menuList.*</param>
			</result>
		</action>
	</package>

</struts>

 

	<!-- 配置dao -->
	<bean id="menuDao" class="com.deppon.dao.impl.MenuDaoImpl" scope="prototype">
		<property name="sqlSessionTemplate" ref="sqlSession"></property>
	</bean>

	<!-- 配置service -->
	<bean id="menuService" class="com.deppon.service.impl.MenuServiceImpl">
		<property name="menuDao" ref="menuDao"></property>
	</bean>

	<!-- 配置Action -->
	<bean id="menuAction" class="com.deppon.action.MenuAction">
		<property name="menuService" ref="menuService"></property>
	</bean>

 这样基本上就写完了,现在我粘贴一下运行的效果

1、首次加载

 

 

2、全部展开

 

 
我是用ssm框架写的,可能有些同学没有用过,但是基本的思想,应该写的很清楚了
  • 大小: 3.6 KB
  • 大小: 11.3 KB
分享到:
评论
10 楼 librad 2016-12-08  
alert 出 proxy.extraParams.tid已经被赋值了。可到action这边就是空的呢!!!
librad 写道
第一次点击小三角时候应该传节点的值,得到的却是空。为什么呢?

谁能揭秘点击“小三角”执行的什么动作? 怎么把“参数”传给Struts2的?

9 楼 librad 2016-12-08  
第一次点击小三角时候应该传节点的值,得到的却是空。为什么呢?

谁能揭秘点击“小三角”执行的什么动作? 怎么把“参数”传给Struts2的?
8 楼 librad 2016-12-07  
librad 写道
请教, 我的参数tid传到Struts总是上一个的值,而不是当前的tid呢!!!知道原因么?

点击箭头, tid => [  ] , tid第一次传递的是空值  谁能指导一下呀?
7 楼 librad 2016-11-30  
请教, 我的参数tid传到Struts总是上一个的值,而不是当前的tid呢!!!知道原因么?
6 楼 haohao866 2016-10-11  
haohao866 写道
painarthur 写道
能把代码发一份儿么? 谢谢!
963203255@qq.com


5 楼 haohao866 2016-10-11  
painarthur 写道
能把代码发一份儿么? 谢谢!
paincupid@hotmail.com

4 楼 jingqilin 2016-06-16  
如果有完整的就更好了,谢谢!
3 楼 jingqilin 2016-06-16  
请麻烦给一下 IMenuDao的代码好吗?谢谢
2 楼 cjgsky 2014-09-18  
你好,能麻烦把代码发一份么?邮箱是sky_frank@qq.com,多谢了!
1 楼 painarthur 2014-08-29  
能把代码发一份儿么? 谢谢!
paincupid@hotmail.com

相关推荐

    Extjs 动态树 数据库

    本项目将详细介绍如何使用ExtJS动态加载树结构,并通过JDBC连接SQL Server数据库获取数据,最终将数据转换为JSON格式以供树结构使用。 首先,让我们了解**ExtJS动态树**的基本概念。动态树(Dynamic Tree)指的是在...

    Extjs4 tree report

    标题“Extjs4 tree report”涉及的...总结来说,这个项目利用ExtJS 4的树形报表功能,结合后台的Java代码和存储过程,实现了大数据量报表的动态生成和按权限加载。这种方法既考虑了性能优化,又满足了权限控制的需求。

    JavaScript的ExtJS框架中数面板TreePanel的使用实例解析

    通过设置TreePanel的loader属性为TreeLoader,并指定dataUrl为Servlet的URL,TreePanel组件就能够通过异步请求的方式从服务器获取数据,并将其加载到树形结构中。 综上所述,ExtJS的TreePanel组件非常适合于开发...

    Hibernate+Spring+Struts2+ExtJS CRUD

    对于动态加载树,使用Ext.tree.TreeStore和Ext.tree.TreePanel,配置树的异步加载,通过Ajax请求获取子节点数据。 - **更新**:当用户修改数据后,ExtJS可以通过AJAX将变化发送到服务器。Struts2接收请求,更新相应...

    extjs 2.0精编教程--民间版

    2. **组件库**:ExtJS 2.0提供了众多预定义的组件,如表格(GridPanel)、表单(FormPanel)、树形视图(TreePanel)、菜单(Menu)等。教程会详细介绍这些组件的用法,包括配置项、事件监听、数据绑定等。 3. **...

    Extjs复习笔记(十九)-- XML作为tree的数据源

    当我们谈论XML作为数据源时,意味着我们从XML文档中提取数据并将其加载到TreePanel中。 首先,XML是一种结构化数据格式,它以易于读取和解析的方式存储信息。在ExtJS中,我们可以利用XMLReader来解析XML文档,将XML...

    老师整理的extjs学习笔记

    它支持异步加载子节点,以及节点的拖放等功能。 **9.2 构建一棵静态的树** 构建一棵静态的树通常需要预先定义好树的数据结构,然后通过 `Ext.tree.TreePanel` 的配置选项来展示。 **9.3 构建动态的树** 构建动态...

    ext实现动态树

    首先,我们需要创建一个`TreeLoader`对象,该对象用于异步加载树的数据。这里我们定义了数据加载的URL: ```javascript var treeLoader = new Ext.tree.TreeLoader({ dataUrl: "TreeServlet.do" }); ``` 其中`...

    Ext表格控件和树控件

    它可以是同步加载或异步加载。在上面的示例中,`TreeLoader` 从 `data.json` 文件加载数据。 ##### 5.4 自定义 `TreeLoader` 对于更复杂的需求,可以自定义 `TreeLoader` 的行为。例如,可以实现自己的 `...

    31总结1

    3. **TreePanel** - 树形视图,支持异步加载和多种交互操作。 4. **FormPanel** - 高度可配置的表单组件,支持各种输入控件和验证规则。 5. **Viewport** - 应用程序的主容器,可以自动适应浏览器窗口大小。 【JSON...

Global site tag (gtag.js) - Google Analytics