论坛首页 Web前端技术论坛

谁来总结一下比较成熟的Web树状结构的解决方案

浏览 118108 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-01-24  
每次点击都是读取需要的节点,不过这样就必须实现一个接口
动态载入java树的例子
用java和js结合来实现,进行了最大程度的抽象

特点
1.动态载入lazy loading
2.无帮定任何数据源,可以是初始化的一个对象,也可以是来自xml,也可以是来自db
3.简洁,只包含一个jar包(图片也包含在了jar里面,这个好像是缺点,不过我不喜欢还要拷贝什么文件夹)
4.标签形式,使用简单
标签树格式如下
<edit:ptree servletmap="true" rootid="80" leafurl="alert('#ID#&'+'#NAME#&'+'#PARAM#')" branchurl="document.all.b.value=#ID#" rootname="root" imptree="com.pub.tag.tree.ImpTreeA"/>

参数说明
servletmap :如果设置成true,那么必须在web.xml加入
  <servlet>
    <servlet-name>TreeInvoker</servlet-name>
    <servlet-class>com.pub.tag.tree.SubTree</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TreeInvoker</servlet-name>
    <url-pattern>/TreeInvoker</url-pattern>
  </servlet-mapping>

如果不写,或者设置成false,服务器必须已经打开了invoker
rootid: 根节点的id
rootname:根节点的名字
leafurl:鼠标点击leaf时执行的事件
branchurl:鼠标点击branch时执行的事件
imptree:tree接口的实现类,里面有一个方法必须实现,就是点击展开的时候把孩子put进去
下面是在jsp中使用的例子
关键字#ID#就是节点的id #NAME#节点的名字 #PARAM#后缀参数如key=value&key1=value1。这些关键字主要
是在点击事件代码里使用如:alert('#ID#'),点击的时候就会弹出alert框,内容就是id的值。也可以写成这样
location='hello.jsp?id=#ID#&name=#NAME#&#PARAM#';

唯一要做的事情就是实现Tree接口的getChidren(String id)这个方法
 public void getChildren(String id); {
  // TODO Auto-generated method stub
         //这个可以是DAO类,或者业务类,任务就是根据id来取得孩子
                List subtrees = Example.getTreeExmaple(id);;
         	for(int i = 0;i < subtrees.size;i ++);{
		TreeExample te = (TreeExample);subtrees.get(i);;
                entity.addBranh(te.getId();,te.getName();,"param1=param");;
                entity.addLeaf(te.getId();,te.getName();","param1=param");;
		}    
         }
查看例子
http://218.92.201.5:8087/treeexample/example1/
下载
http://218.92.201.5:8087/treeexample/treeexample.rar
0 请登录后投票
   发表时间:2005-01-24  
看不出,这种做法有什么好处
0 请登录后投票
   发表时间:2005-01-24  
电力系统的例子,因为节点(电站)很多很多,而且节点都是存在数据库里。一般来说根据父节点取的子节点的API都已经有了,所以只要实现一点点的代码就可以了(把孩子put进去)。该树也支持节点按不同颜色显示,支持节点点击时的任意多参数(这些都是一个朋友的要求,后来都加入进去)。因为lazy loading 所以没什么性能问题
0 请登录后投票
   发表时间:2005-01-27  
如果要基于服务器端状态保持实现树,有一个商用tag叫common-controls的,效果还不错。但是如果你要用开源的解决方案,也有一个叫做treetag的东西(好象现在集成到了prizetag中),稍微努力一点就可以完全实现common-control的tree或treelist功能
0 请登录后投票
   发表时间:2005-02-02  
dragon_jdh 写道
kid,其实我挺想用applet的,但是由于受浏览器的限制,加上没有成熟的经验,所以没用。你有applet做的功能较强的树的例子吗?多谢


weblogic的管理console和IBM的web帮助系统用的都是applet.
0 请登录后投票
   发表时间:2005-02-04  
本人使用STRUTS MENU+XTREE 方案,能够实现XML配置树,XTREE展现树,感觉不错!能够把前后台很好的结合。
0 请登录后投票
   发表时间:2005-02-05  
lianghyan 写道
本人使用STRUTS MENU+XTREE 方案,能够实现XML配置树,XTREE展现树,感觉不错!能够把前后台很好的结合。



XTREE好像的确很不错哦,不知道用的人多否。
好像struts menu和xtree功能重复,STRUTS MENU+XTREE 方案是什么意思?可否介绍一下用法吗?多谢了。
0 请登录后投票
   发表时间:2005-02-16  
有一个问题大家都还没有讨论到,就是树型结构的右键菜单的实现方式,树分支节点,叶子节点的右键菜单一般是需要不同的实现的,叶子节点基本上都需要有添加,删除,上移,下移等功能,不知道各位有什么好的实现方法??
0 请登录后投票
   发表时间:2005-02-16  
topojuly 写道
有一个问题大家都还没有讨论到,就是树型结构的右键菜单的实现方式,树分支节点,叶子节点的右键菜单一般是需要不同的实现的,叶子节点基本上都需要有添加,删除,上移,下移等功能,不知道各位有什么好的实现方法??

个人觉得不应该把这些(添加,删除,上移,下移)功能加到树里,一棵通用的树必须被抽象,树应该是后台数据和结构的体现,而所有对树的操作都是对应到对数据的操作,所以树的所有操作都应该只是接口。
0 请登录后投票
   发表时间:2005-04-17  
我推荐CSDN的树,我们公司现在就采用的这个树,感觉很不错。感觉有以下特点:
  1 后台准备数据库简单。就是一个简单的查询将当前接点下的第一层孩子接点查找出来,这里还可以加入你自己的权限控制,隐藏某些结点。

  2 前台显示的数据格式可以自定义。在这个树里它使用的是xml+xsl来展现结点数据的样式的,当然你也可以自己用其他方式例如jsp来实现。实际上再完美的现成的树组件,都不可能完全满足所有你的应用。在CSDN的树里你要改变什么样式,那么只要增加一个xslt样式文件就搞定了。随便你的这些展现的数据要提交到哪,都可以自己来定义,很方便,比如上面有位兄弟提到的,要将哪些结点选中,哪些disabled掉。

  3 还有这个树,充分利用了前后台的优势,兼顾了性能。它的结点只从数据库里取一次,实际上是按需取数。它的结点只取到当前结点的下一子结点。然后这些结点就被缓存到客户端,下次浏览的时候就不再向数据库发请求了。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics