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); //第三层
.....
------解决方案--------------------