首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

java 树如何弄

2013-01-21 
java 树怎么弄我的数据库主要就2个字段,一个是serviceId,一个是parentCatalogId,parentCatalogId为空表示

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


   3     1     1
   4     0     0
   5     4     1
PID为父子节点,PID=0则为父级任务。leaf是叶子节点,如果叶子节点为true(1),那么本节点就没有孩……



他的数据本身就是一颗树,展现一颗树和怎么存放一颗树完全是两回事,如果数据本身就是一颗
树,就算你存放的顺序乱七八糟,也可以在展现时展现成一颗树,我觉得楼主没搞明白这个道理
展现的时候只要找到所有的根,然后一次添加每个根下的直接后继子数据就可以了,循环如此
真的和数据存成什么样子没关系
[解决办法]
引用:
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 list……


NO,你完全搞错javaBean了
[解决办法]
引用:
这个是我的表结构

是oracle吧,
小技巧
 select id,parent_id,LEVEL  from table start with id='根结点ID' connect by prior id=parent_id  

[解决办法]
class User {
private String catalogId;
private String serviceId;
private String parentId;

public String getCatalogId() {
return catalogId;
}
public void setCatalogId(String catalogId) {
this.catalogId = catalogId;
}
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
}

javaBean这样就可以了
然后你在循环取数据的代码里,例如(伪代码)
     List list = new ArrayList();
     for(循环记录集) {
         String catalogId = rs.getString("catalog_ID");
         String catalogId = rs.getString("serviceId");
         String catalogId = rs.getString("parentId");
         //进行设值
         User user = new User();
         user.setCatalogId(catalogId ) 
         ....
         ....
         list.add(user);
     }
       setAttribute("treeData",list);
[解决办法]
json  递归
[解决办法]
递归试试看看
[解决办法]
引用:
Java code?123456789101112131415161718192021222324class User {    private String catalogId;    private String serviceId;    private String parentId;         public String getCatalogId() { ……


然后用递归就可以展示了。

[解决办法]
java 树如何弄
[解决办法]
定义个类:节点ID,父节点ID,是否有孩子节点等等信息。根据25楼sql查出来就可以了

热点排行