问题描述
最近想研究研究java动态树,extjs的倒是看过,不会改,因为对于extjs不熟。想自己封装一个,运用ssh框架,sqlserver2005数据库,jQuery等。哪位能指点一下,给点意见。
解决方案
解决方案二:
思路:递归算法~~~还算简单
解决方案三:
所答非所问,继续求详细指点。
解决方案四:
这个对于展示的话就是用递归而在数据库设计的时候,则在每条记录存一个他上级的id,页面的话,再加点样式。可能就是页面比较麻烦。后台没有什么东西。用js+css写也行,就是很麻烦。
解决方案五:
简单的树我也会。但是我这个是个无限级的树,而且,增删改查都需要在另一个页面上完成。并非直接修改。可以先生成XML,然后从里面取节点,或者点击链接查询数据库取节点,两种方法都是一样的吗?求指点。
解决方案六:
先说下表结构,一张表,三个字段:选项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的所有项取出来,即该顶级选项的子选项,然后在页面上添加到顶级选项中
解决方案七:
楼上说了很多,但是没说到点上。有具体的实现类吗?或者例子也行,我看的是实现的方法,和点击节点获取的参数,以及转向。还有取值的方法(XML的好些,还是数据库的好些。有那些利弊)继续求解。
解决方案八:
引用6楼tokissing的回复:
楼上说了很多,但是没说到点上。有具体的实现类吗?或者例子也行,我看的是实现的方法,和点击节点获取的参数,以及转向。还有取值的方法(XML的好些,还是数据库的好些。有那些利弊)继续求解。
没说到点上?你搞笑呢?下面这个例子是根据数据库中的产品类别生成菜单,你要的是树菜单,比葫芦画瓢会吧?$(document).ready(function(){//从后台读取产品类别中的顶级类别$.getJSON("../system/ajaxListFatherProductType",function(data){varwaitLoader=$("#waitLoad");if(data!=null){waitLoader.after('</ul>');waitLoader.after('<ulid="menu"class="menu">');varulMenu=$("#menu");$.each(data,function(i,fatherPro){//遍历,将所有的顶级类别插入waitLoader中ulMenu.append('<li><aclass="fatherPro"href="#">'+fatherPro.name+'</a>');ulMenu.append('<ulid='+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){vara="#"+fatherPro.id;$(a).append('<li><astyle="background:#D2D3DA;"href="listProduct?product.productType.id='+childPro.id+'"target="I2">'+childPro.name+'</a></li>');});}});});}});});
解决方案九:
http://blog.csdn.net/qingtaoY/archive/2010/08/25/5836968.aspx
解决方案十:
5楼说的意思可以做个无限树,就是一级一级往下取,这还有什么说的?点开一个节点,调用AJAX参数嘛就是父ID。数据库和XML个人认为还是数据库来的好,起码SQL语句还是方便。XML解析麻烦一点(添加节点和删除节点的情况),如果是非动态树XML没什么问题。还有你要求什么例子,分给的这么少有人会费那么大劲给你贴出来吗?最好还是找个好的点子,自己去完成
解决方案十一:
假设从数据库里读出来的Object[]里前3个字段分别是idnamepidimportjava.util.*;publicclassTree{publicListgetDeepTree(Listlist){Listtree=newArrayList();Listnode=newArrayList();if(list==null||list.size()==0){returnnull;}while(list.size()>0){if(node.size()==0){for(inti=0;i<list.size();i++){Objecto[]=(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(inti=0;i<list.size();i++){Objecto_child[]=(Object[])list.get(i);Objecto_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);}returntree;}publicstaticvoidmain(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}};Listlist=newArrayList();for(inti=0;i<obj.length;i++){list.add(obj[i]);}Listlist2=newTree().getDeepTree(list);for(inti=0;i<list2.size();i++){System.out.println(((Object[])list2.get(i))[0]+""+((Object[])list2.get(i))[2]);}}}
解决方案十二:
该回复于2011-03-07 13:38:58被版主删除
解决方案十三:
该回复于2011-03-07 14:34:04被版主删除
解决方案十四:
引用9楼wangjiangbo2的回复:
5楼说的意思可以做个无限树,就是一级一级往下取,这还有什么说的?点开一个节点,调用AJAX参数嘛就是父ID。数据库和XML个人认为还是数据库来的好,起码SQL语句还是方便。XML解析麻烦一点(添加节点和删除节点的情况),如果是非动态树XML没什么问题。还有你要求什么例子,分给的这么少有人会费那么大劲给你贴出来吗?最好还是找个好的点子,自己去完成
这就是9楼的不对了,你要是能贴出来,你想要多少分都能给你。不是分的问题,第一次使用csdn发帖子,还望包涵。
解决方案十五:
继续求解,求方法,只要读取根节点,然后生成子节点的方法就行,只要能刷出树即可,非诚勿扰啊。。
解决方案:
我说的那个表结构就能存储无限极的树节点
解决方案:
引用15楼prince_java的回复:
我说的那个表结构就能存储无限极的树节点
你的方法我看了,但是进入方法直接就出下载窗口。why?你测试了吗?
解决方案:
可以看看easyUI的tree,我只实现了3级树,他有DEMO。自己做印象深刻