`
猫不吃的鱼
  • 浏览: 158599 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖市
社区版块
存档分类
最新评论

递归手动生成treepanel的子孙树节点

阅读更多
开发中的一个需求,需要将一个自关联的表取出数据后,反映到前台的ext树形式。由于鄙人对ext不怎么熟,或许不用下面这么麻烦实现子孙节点关系,但是开发时为了快速实现原型,才想到下面的方法,或许只是下策。

由于从后台取得的数据是List<Map>形式,一个map是一条数据,数据之间没有直接的子孙关系,
并且本地renderJson方法是将Map转化为json形式传递到前台,renderJson本身不会组织数据之间的子孙关系,然而ext构建树节点需要  [{id:'xx',text:'xxx',children:[{id:'xxx',text:'',leaf:true},{.....}]}] 这种形式。这种对象中有数组的形式导致我不得不转化数据,所以需要转化List<Map>中的数据,以便renderJson可以生成符合ext树节点json的形式。



下面是自己手动转化数据,在后台将数据转化为ext的树节点子孙关系结构。最后json形式传递到前台,生成treepanel子孙节点。感觉效率不怎么高,需要优化,也许我没想到更好的方法。
//yuyong 2012-3-14

//"select level,a.* from zzjg a start with a.id in (select id from zzjg where //super_id is null)\n" +
//                "connect by prior a.id=a.super_id\n" +
//                "order by level"
//categoryQuery.listAll()是通过上述迭代查询获取数据,讲父级节点查出置于前列。
 List<Map>lists=categoryQuery.listAll();
 List<Map>treeNodes=new ArrayList<Map>();
 while(lists.size()>0){
 for(Iterator iter=lists.iterator();iter.hasNext();){
		Map m= (Map) iter.next();
		if(m.get("PARENT_ID")==null ){
			Map map=new HashMap();
			map.put("id", toInteger(m.get("ID")));
			map.put("text", m.get("NAME"));
			map.put("path", m.get("PATH"));
			map.put("leaf", true);
			treeNodes.add(map);
			iter.remove();
		}
		else
			for(Map map:treeNodes){
				Map mapSon=new HashMap();
				mapSon.put("id", toInteger(m.get("ID")));
				mapSon.put("text", m.get("NAME"));
				mapSon.put("path", m.get("PATH"));
				if(appendChild(map,toInteger(m.get("PARENT_ID")),mapSon)){
					iter.remove();
					break;
				}
			}
	}
}
this.renderJson(treeNodes, resp);


//递归添加子节点,将子节点添加到父节点的children集合中
private boolean appendChild(Map map,Integer parentId,Map mapSon){
	if(((Integer)map.get("id")).intValue()==parentId.intValue()){
		if(map.get("children")==null){
			map.put("children", new ArrayList<Map>());
		}
		map.put("leaf", false);
		mapSon.put("leaf", true);
		((List<Map>)map.get("children")).add(mapSon);
			return true;
		}else{
			if(map.get("children")!=null){
				List<Map>lists=(List<Map>) map.get("children");
				for(Map m:lists){
					if(appendChild(m,parentId,mapSon))
						return true;
				}
			}
		}
	return false;
}


//yuyong 2012-3-14

这样传递到前台的数据就是[{id:'xx',text:'xxx',children:[{id:'xxx',text:'',leaf:true},{.....}]}] 的json形式了。



1
0
分享到:
评论

相关推荐

    树父节点递归获取树子节点

    在Java中,通过递归方法我们可以轻松地实现从父节点获取所有子节点的功能,这对于构建树形结构的应用程序(如文件系统、组织结构或菜单系统)非常有用。理解并掌握递归是每个程序员必备的技能之一。

    递归算法计算二叉树中叶子节点的数目

    递归算法计算二叉树中叶子节点的数目

    用递归实现C#树形结构

    总结来说,用递归实现C#树形结构的关键在于理解树的节点结构以及递归函数的设计。通过创建表示节点的类并定义递归遍历方法,我们可以轻松地处理各种树形数据结构的操作。递归方法在处理树形结构时不仅简洁,而且效率...

    网页上的树节点的制作源代码,生成多个树节点

    - 如果树节点层级较深,可以使用递归函数生成HTML结构。递归函数会根据节点的数据结构自动生成对应的HTML结构,包括其所有的子节点。 5. **数据绑定**: - 在实际项目中,树节点的数据可能来源于服务器。使用Ajax...

    QTreeView递归实现展开或者闭合某个节点下面的所有子节点

    QTreeView递归实现展开或者闭合某个节点下面的所有子节点 不是一键展开所有,是展开你要操作的节点下面的所有子节点!

    c#递归树自动树

    根据给定的信息,本文将详细解释C#中的递归树构建方法,并重点解析如何通过递归函数实现自动化的树形结构构建,包括添加父子节点等操作。 ### 一、递归树的概念 在计算机科学中,树是一种常用的数据结构,它由节点...

    mysql递归调用获取树节点(子树)

    在MySQL数据库中,处理层级关系数据,如组织结构、菜单系统或分类树等,常常需要进行递归查询来获取树状结构的子节点。这里我们将深入探讨如何在MySQL中使用存储过程来实现这一功能。 首先,为了理解这个过程,我们...

    matlab递归生成树

    使用递归方法生成连通树的matlab小程序,仅供参考,写出来还是比较简单

    SQL sever 中递归查找子节点和父节点

    SQL Server 中递归查找子节点和父节点 在关系数据库管理系统中,特别是在 SQL Server 中,递归查找子节点和父节点是一种常见的操作。这种操作可以应用于树形结构的数据存储和查询中,例如组织结构、目录结构、分类...

    动态添加树节点

    在Web开发中,经常需要构建具有层级结构的数据展示,比如组织架构、目录结构等,这时“动态添加树节点”就显得尤为重要。这个功能通常涉及前端的HTML和后端的数据处理,以及可能的数据库交互。在本例中,我们将深入...

    在JSP中使用递归算法生成目录树

    本文将介绍一种使用递归算法在JSP中生成目录树的方法,结合数据库技术,使得动态生成目录树变得可行。 1. 基本思路: 生成目录树的关键在于理解目录结构的层次关系,这通常可以通过递归算法来实现。递归是一种解决...

    使用递归生成文件目录树

    ### 使用递归生成文件目录树 #### 概述 在计算机科学中,文件系统的组织结构通常采用树形结构表示,其中根目录为树的根节点,而子目录和文件则作为分支节点。为了清晰地展示文件系统中的层级关系,本篇文章将介绍...

    运用递归生成树形结构 Treeview

    本教程将详细解释如何运用递归方法生成树形结构,使得数据能够以视觉上易于理解的树状布局呈现。 一、.NET Treeview简介 .NET Treeview控件是Windows Forms中的一员,它允许开发人员在用户界面中展示分层的数据结构...

    C# 递归生成树_TreeView

    在生成树结构时,递归非常适合处理层级关系,因为每一层节点都可以看作是对上一层节点的重复操作。在C#中,我们通常定义一个方法,该方法接受当前节点信息,并递归地处理其子节点。 2. **TreeView控件**: `...

    递归和非递归建立树和树的前,中,后,分层遍历

    在建立树时,我们通常从根节点开始,然后递归地创建每个子节点。例如,如果我们有节点的数据结构定义为`Node(data, left, right)`,我们可以创建一个递归函数,接受节点值和子节点的值列表,然后依次创建子节点。 2...

    C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法

    本文实例讲述了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法。分享给大家供大家参考,具体如下: /*求二叉树叶子节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #...

    Java递归算法构造JSON树形结构

    Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...

    使用递归和dom遍历dom树形结构

    在DOM树的情况下,递归非常适合用来遍历整个树结构,因为它可以深入到树的每一层,确保每个节点都被访问。 #### Java实现示例 以下是一个使用递归和DOM来遍历XML文档的Java代码示例: ```java package ...

    winform 根据节点列表生成树

    总结起来,这个例子展示了如何在Winform环境中利用数据绑定和递归算法从节点列表生成树形视图,这对于任何需要展示层次结构数据的项目都非常有用。通过对提供的"TreeTest"文件进行研究,开发者可以学习到数据驱动UI...

    递归遍历目录并生成树

    在给定的标题“递归遍历目录并生成树”中,涉及的核心技术是递归算法和Windows API的使用,特别是与文件系统交互的部分。这个任务可以通过使用MFC(Microsoft Foundation Classes)中的`CTreeCtrl`控件来实现,它...

Global site tag (gtag.js) - Google Analytics