日期:2014-05-20  浏览次数:20768 次

java 树怎么弄
我的数据库主要就2个字段,一个是serviceId,一个是parentCatalogId,parentCatalogId为空表示该serviceId为根目录,不为空,表示该serviceId的上层目录为parentCatalogId所对应的值,动态展示我做出来了,但是头让我做个一次显示所有目录的出来,有点搞不定了,来求教

------解决方案--------------------
你的动态展示是什么意思。
不就是树形菜单展示吗?

------解决方案--------------------
你是说在JSP里怎么展现这颗树的数据吗?

------解决方案--------------------
先说你要用什么来展现数据吧,展现方式的不同,决定策略的不同
------解决方案--------------------
用dtree不可以吗?
------解决方案--------------------
你问的问题就好像一个人到了饭馆然后和别人说:我要吃饭,然后就坐那里等着别人上饭了
------解决方案--------------------
后台负责查询数据,展现放到页面去做,用jquery就能做到你说的动态效果。
------解决方案--------------------
其实你后台用什么数据结构都可以,就算是一条记录用一个字符串都没问题,
只要你能够在前台分析出那个是根,然后依次添加根后面的子就可以。
言归正传,说说我的思路:首先我会有一个类来记录查询出来的数据,也就是javaBean
然后sql在查询的时候按CatalogId升序排列,这样可以保证一个顺序,然后将查询出的
每一条数据用javaBean装载,再用一个list来装所有的javaBean,然后setAttribute,你懂的
然后就是前台依次取数据了(因为已经排序了,所取的效率高),然后构造树

当然如果有的树组件支持一次性load树形数据,那么只要构造出他要求的数据格式就可以了
------解决方案--------------------
如果使用dtree的话,在add方法里有一个字段是open,通过设置这个字段可以设置节点第一次加载是否打开
------解决方案--------------------
引用:
引用:你问的问题就好像一个人到了饭馆然后和别人说:我要吃饭,然后就坐那里等着别人上饭了
小学语文是数学老师教的……我是想说如果别人访问一次,我直接把目录全部显示出来,就像这样,而不是这种效果,表述不够明确,支持第一种图片的后台应该提供什么样的数据结构才能在前台显示出第一种效果呢

还是没看明白你的问题重点,
你是准备数据没有,还是不知道如何展开显示(这是前台的事),

------解决方案--------------------
你可以用递归来实现这种功能
比如有:
   ID    PID   leaf
   1     0     0
   2     1     1
   3     1     1
   4     0     0
   5     4     1
PID为父子节点,PID=0则为父级任务。leaf是叶子节点,如果叶子节点为true(1),那么本节点就没有孩子了,如果叶子节点为false(0),说明本节点下面还有孩子。
上面的数据就是一棵树
展现形式为:
--1
----2
----3
--4
----5
定义一个方法,查询出所有的父ID,再调用自身,查询自己下面的子ID,直到叶子节点为0。一个递归就可以完成一棵树了。
------解决方案--------------------
public class User{

private User(int id){
 this.id = id;
}

private int id;

private List<User> children;
....
}

User L1 = new User(1); //头
User L2 = new User(2);
List list1 = new ArrayList(1);
list1.add(L2);
L1.setChildren(list1); //第二层

User L3 = new User(3);
List list2 = new ArrayList(2);
List2.add(L3);
L2.setChildren(list2); //第三层
.....


------解决方案--------------------
引用:
你可以用递归来实现这种功能
比如有:
   ID    PID   leaf
   1     0     0
   2     1     1