开发中的一个需求,需要将一个自关联的表取出数据后,反映到前台的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形式了。
分享到:
相关推荐
在Java中,通过递归方法我们可以轻松地实现从父节点获取所有子节点的功能,这对于构建树形结构的应用程序(如文件系统、组织结构或菜单系统)非常有用。理解并掌握递归是每个程序员必备的技能之一。
总结来说,用递归实现C#树形结构的关键在于理解树的节点结构以及递归函数的设计。通过创建表示节点的类并定义递归遍历方法,我们可以轻松地处理各种树形数据结构的操作。递归方法在处理树形结构时不仅简洁,而且效率...
QTreeView递归实现展开或者闭合某个节点下面的所有子节点 不是一键展开所有,是展开你要操作的节点下面的所有子节点!
递归算法计算二叉树中叶子节点的数目
- 如果树节点层级较深,可以使用递归函数生成HTML结构。递归函数会根据节点的数据结构自动生成对应的HTML结构,包括其所有的子节点。 5. **数据绑定**: - 在实际项目中,树节点的数据可能来源于服务器。使用Ajax...
SQL Server 中递归查找子节点和父节点 在关系数据库管理系统中,特别是在 SQL Server 中,递归查找子节点和父节点是一种常见的操作。这种操作可以应用于树形结构的数据存储和查询中,例如组织结构、目录结构、分类...
根据给定的信息,本文将详细解释C#中的递归树构建方法,并重点解析如何通过递归函数实现自动化的树形结构构建,包括添加父子节点等操作。 ### 一、递归树的概念 在计算机科学中,树是一种常用的数据结构,它由节点...
在MySQL数据库中,处理层级关系数据,如组织结构、菜单系统或分类树等,常常需要进行递归查询来获取树状结构的子节点。这里我们将深入探讨如何在MySQL中使用存储过程来实现这一功能。 首先,为了理解这个过程,我们...
使用递归方法生成连通树的matlab小程序,仅供参考,写出来还是比较简单
在Web开发中,经常需要构建具有层级结构的数据展示,比如组织架构、目录结构等,这时“动态添加树节点”就显得尤为重要。这个功能通常涉及前端的HTML和后端的数据处理,以及可能的数据库交互。在本例中,我们将深入...
本文将介绍一种使用递归算法在JSP中生成目录树的方法,结合数据库技术,使得动态生成目录树变得可行。 1. 基本思路: 生成目录树的关键在于理解目录结构的层次关系,这通常可以通过递归算法来实现。递归是一种解决...
### 使用递归生成文件目录树 #### 概述 在计算机科学中,文件系统的组织结构通常采用树形结构表示,其中根目录为树的根节点,而子目录和文件则作为分支节点。为了清晰地展示文件系统中的层级关系,本篇文章将介绍...
本教程将详细解释如何运用递归方法生成树形结构,使得数据能够以视觉上易于理解的树状布局呈现。 一、.NET Treeview简介 .NET Treeview控件是Windows Forms中的一员,它允许开发人员在用户界面中展示分层的数据结构...
在生成树结构时,递归非常适合处理层级关系,因为每一层节点都可以看作是对上一层节点的重复操作。在C#中,我们通常定义一个方法,该方法接受当前节点信息,并递归地处理其子节点。 2. **TreeView控件**: `...
在建立树时,我们通常从根节点开始,然后递归地创建每个子节点。例如,如果我们有节点的数据结构定义为`Node(data, left, right)`,我们可以创建一个递归函数,接受节点值和子节点的值列表,然后依次创建子节点。 2...
本文实例讲述了C++使用递归和非递归算法实现的二叉树叶子节点个数计算方法。分享给大家供大家参考,具体如下: /*求二叉树叶子节点个数 -- 采用递归和非递归方法 经调试可运行源码及分析如下: ***/ #include #...
Java 递归算法构造 JSON 树形结构 Java 递归算法构造 JSON 树形结构是指通过 Java 语言使用递归算法将数据库中的菜单表构建成树形的 JSON 格式发送给第三方。这种方法可以将复杂的树形结构数据转换成易于理解和处理...
在DOM树的情况下,递归非常适合用来遍历整个树结构,因为它可以深入到树的每一层,确保每个节点都被访问。 #### Java实现示例 以下是一个使用递归和DOM来遍历XML文档的Java代码示例: ```java package ...
总结起来,这个例子展示了如何在Winform环境中利用数据绑定和递归算法从节点列表生成树形视图,这对于任何需要展示层次结构数据的项目都非常有用。通过对提供的"TreeTest"文件进行研究,开发者可以学习到数据驱动UI...
`NodeRepository`可以继承`JpaRepository, Long>`,并添加自定义方法来处理递归查询,例如获取某个节点的所有子孙节点: ```java public interface NodeRepository extends JpaRepository, Long> { List<Node> ...