求一java语言写的动态加载树!(从数据库读取节点的那种)

tokissing 2011-03-07 09:16:58
最近想研究研究java动态树,extjs的倒是看过,不会改,因为对于extjs不熟。
想自己封装一个,运用ssh框架,sqlserver2005数据库,jQuery等。
哪位能指点一下,给点意见。
...全文
405 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjiangbo2 2011-03-12
  • 打赏
  • 举报
回复
可以看看easyUI的tree,我只实现了3级树,他有DEMO。
自己做印象深刻
tokissing 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 prince_java 的回复:]
我说的那个表结构就能存储无限极的树节点
[/Quote]

你的方法我看了,但是进入方法直接就出下载窗口。why?你测试了吗?
prince_java 2011-03-08
  • 打赏
  • 举报
回复
我说的那个表结构就能存储无限极的树节点
tokissing 2011-03-08
  • 打赏
  • 举报
回复
继续求解,求方法,只要读取根节点,然后生成子节点的方法就行,只要能刷出树即可,非诚勿扰啊。。
veardn 2011-03-07
  • 打赏
  • 举报
回复
假设从数据库里读出来的Object[] 里前3个字段分别是id name pid


import java.util.*;


public class Tree {


public List getDeepTree(List list){
List tree = new ArrayList();
List node = new ArrayList();
if(list == null || list.size() == 0){
return null;
}
while(list.size() > 0){
if(node.size() == 0){
for(int i = 0; i < list.size(); i++){
Object o[] = (Object[])list.get(i);
if(o[2] == null){
node.add(0, o);
tree.add(o);
list.remove(i);
break;
}
}
}
if(node.size() == 0){
break;
}
for(int i = 0; i < list.size(); i++){
Object o_child[] = (Object[])list.get(i);
Object o_parent[] = (Object[])node.get(0);
if(o_child[2] == o_parent[0]){
node.add(0, o_child);
tree.add(o_child);
list.remove(i);
i = -1;
continue;
}
}
node.remove(0);
}
return tree;
}

public static void main(String[] args) {
Object[][] obj = {
{1,1,null},
{2,2,3},
{3,3,1},
{4,4,2},
{5,5,4},
{6,6,5},
{7,7,4},
{8,8,10},
{9,9,null},
{10,10,9}
};
List list = new ArrayList();
for(int i = 0; i < obj.length; i++){
list.add(obj[i]);
}
List list2 = new Tree().getDeepTree(list);
for(int i = 0; i < list2.size(); i++){
System.out.println(((Object[])list2.get(i))[0] + " " + ((Object[])list2.get(i))[2]);
}
}

}

wangjiangbo2 2011-03-07
  • 打赏
  • 举报
回复
5楼说的意思可以做个无限树,就是一级一级往下取,这还有什么说的?
点开一个节点,调用AJAX参数嘛就是父ID。
数据库和XML个人认为还是数据库来的好,起码SQL语句还是方便。
XML解析麻烦一点(添加节点和删除节点的情况),如果是非动态树XML没什么问题。
还有你要求什么例子,分给的这么少有人会费那么大劲给你贴出来吗?
最好还是找个好的点子,自己去完成
qingtaoY 2011-03-07
  • 打赏
  • 举报
回复
http://blog.csdn.net/qingtaoY/archive/2010/08/25/5836968.aspx
prince_java 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 tokissing 的回复:]

楼上说了很多,但是没说到点上。
有具体的实现类吗?或者例子也行,我看的是实现的方法,和点击节点获取的参数,以及转向。
还有取值的方法(XML的好些,还是数据库的好些。有那些利弊)
继续求解。
[/Quote]
没说到点上?你搞笑呢?
下面这个例子是根据数据库中的产品类别生成菜单,你要的是树菜单,比葫芦画瓢会吧?

$(document).ready(function() {
//从后台读取产品类别中的顶级类别
$.getJSON("../system/ajaxListFatherProductType",function(data){
var waitLoader=$("#waitLoad");
if(data!=null){
waitLoader.after('</ul>');
waitLoader.after('<ul id="menu" class="menu">');
var ulMenu=$("#menu");
$.each(data,function(i,fatherPro){
//遍历,将所有的顶级类别插入waitLoader中
ulMenu.append('<li><a class="fatherPro"

href="#">'+fatherPro.name+'</a>');
ulMenu.append('<ul id='+fatherPro.id+'>');
ulMenu.append('</ul>');
ulMenu.append('</li>');
//从后台读取产品类别所有子类别
$.getJSON("../system/ajaxListChildProductType?

productType.id="+fatherPro.id+"",function(data){
if(data!=null){
//将产品子类插入产品顶级类别下面
$.each(data,function(i,childPro){
var a="#"+fatherPro.id;
$(a).append('<li><a

style="background:#D2D3DA;" href="listProduct?product.productType.id='+childPro.id+'"

target="I2">'+childPro.name+'</a></li>');
});
}
});
});
}
});
} );
tokissing 2011-03-07
  • 打赏
  • 举报
回复
楼上说了很多,但是没说到点上。
有具体的实现类吗?或者例子也行,我看的是实现的方法,和点击节点获取的参数,以及转向。
还有取值的方法(XML的好些,还是数据库的好些。有那些利弊)
继续求解。
prince_java 2011-03-07
  • 打赏
  • 举报
回复
先说下表结构,一张表,三个字段:选项ID,选项Name,选项所属ID
选项ID可以自动生成,我用的是hibernate的UUID策略,Name随意,然后是选项所属ID,如果是第一级菜单的话,可以把其选项所属ID设为0,子菜单的话,选项所属ID是父类的ID
比如说现在有一个一级选项A,id为123,名称为A,选项所属ID就为0
然后有一个选项B是选项A的子选项,id不用管,自动生成,名称为A,选项所属ID就是A的ID:123

取数据的时候,先把选项所属ID为0的取出来,即顶级选项,然后再将选项所属ID为此顶级选项ID的所有项取出来,即该顶级选项的子选项,然后在页面上添加到顶级选项中
tokissing 2011-03-07
  • 打赏
  • 举报
回复
简单的树我也会。
但是我这个是个无限级的树,而且,增删改查都需要在另一个页面上完成。并非直接修改。
可以先生成XML,然后从里面取节点,或者点击链接查询数据库取节点,两种方法都是一样的吗?
求指点。
cfd406635982 2011-03-07
  • 打赏
  • 举报
回复
这个对于展示的话 就是用递归
而在数据库设计的时候,则在每条记录存一个他上级的id,
页面的话,再加点样式。
可能就是页面比较麻烦。后台没有什么东西。
用js+css写也行,就是很麻烦。
tokissing 2011-03-07
  • 打赏
  • 举报
回复
所答非所问,继续求详细指点。
strike2368168 2011-03-07
  • 打赏
  • 举报
回复
思路:递归算法~~~
还算简单
tokissing 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wangjiangbo2 的回复:]
5楼说的意思可以做个无限树,就是一级一级往下取,这还有什么说的?
点开一个节点,调用AJAX参数嘛就是父ID。
数据库和XML个人认为还是数据库来的好,起码SQL语句还是方便。
XML解析麻烦一点(添加节点和删除节点的情况),如果是非动态树XML没什么问题。
还有你要求什么例子,分给的这么少有人会费那么大劲给你贴出来吗?
最好还是找个好的点子,自己去完成
[/Quote]
这就是9楼的不对了,你要是能贴出来,你想要多少分都能给你。不是分的问题,第一次使用csdn发帖子,还望包涵。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧