最近想研究研究java动态树,extjs的倒是看过,不会改,因为对于extjs不熟。
想自己封装一个,运用ssh框架,sqlserver2005数据库,jQuery等。
哪位能指点一下,给点意见。

解决方案 »

  1.   

    这个对于展示的话 就是用递归
    而在数据库设计的时候,则在每条记录存一个他上级的id,
    页面的话,再加点样式。
    可能就是页面比较麻烦。后台没有什么东西。
    用js+css写也行,就是很麻烦。
      

  2.   

    简单的树我也会。
    但是我这个是个无限级的树,而且,增删改查都需要在另一个页面上完成。并非直接修改。
    可以先生成XML,然后从里面取节点,或者点击链接查询数据库取节点,两种方法都是一样的吗?
    求指点。
      

  3.   

    先说下表结构,一张表,三个字段:选项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的所有项取出来,即该顶级选项的子选项,然后在页面上添加到顶级选项中
      

  4.   

    楼上说了很多,但是没说到点上。
    有具体的实现类吗?或者例子也行,我看的是实现的方法,和点击节点获取的参数,以及转向。
    还有取值的方法(XML的好些,还是数据库的好些。有那些利弊)
    继续求解。
      

  5.   

    没说到点上?你搞笑呢?
    下面这个例子是根据数据库中的产品类别生成菜单,你要的是树菜单,比葫芦画瓢会吧? $(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>');
    });
    }
    });
       });
    }
         });
    } );
      

  6.   

    http://blog.csdn.net/qingtaoY/archive/2010/08/25/5836968.aspx
      

  7.   

    5楼说的意思可以做个无限树,就是一级一级往下取,这还有什么说的?
    点开一个节点,调用AJAX参数嘛就是父ID。
    数据库和XML个人认为还是数据库来的好,起码SQL语句还是方便。
    XML解析麻烦一点(添加节点和删除节点的情况),如果是非动态树XML没什么问题。
    还有你要求什么例子,分给的这么少有人会费那么大劲给你贴出来吗?
    最好还是找个好的点子,自己去完成
      

  8.   

    假设从数据库里读出来的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]);
    }
    }}
      

  9.   

    这就是9楼的不对了,你要是能贴出来,你想要多少分都能给你。不是分的问题,第一次使用csdn发帖子,还望包涵。
      

  10.   


    你的方法我看了,但是进入方法直接就出下载窗口。why?你测试了吗?
      

  11.   

    可以看看easyUI的tree,我只实现了3级树,他有DEMO。
    自己做印象深刻