邓华

BlogJava 联系 聚合 管理
  48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks
这两天,为了实现ajax的树形目录,找了很多代码. 最后确定用xloadtree.

在xloadtree的主页上, 有项目xtree 和xloadtree  一个是固定显示的树,一个是动态加载的树.

在他的隐藏目录里,有一个xtree2  地址为http://webfx.eae.net/dhtml/xtree2b/  这个是正在测试的版本, 融合了xtree和xloadtree.  更新了代码, 但还是beta版.

xloadtree 可以在各种浏览器下通用. 兼容性效果非常好.

主要的三个文件:  xtree2.js, xloadtree2.js, xtree2.css 
xloadtree2.js 主要是对ajax方式的封装, 实现异步调用. 显示树的时候,调用xtree2.js里面的代码. xtree2.css 控制树的显示式样.  在查看他的文档的时候,主要看xtree2的文档,这里面才有对树怎样进行操作. xloadtree只是个调用包装.

xtree2.js :
输出html代码的时候, 调用的是toHtml() 方法. 在这个方法中,其中最主要的是getRowHtml() 来得到每一行的输出.  方法中用 getExpandIconHtml() 来控制展开后图标的代码输出, getIconHtml()控制未展开的图标输出.  getLabelHtml() 控制文本的输出, 如果不想要图标,就把图标的输出代码屏蔽掉就OK.


关于在页面输出后,看不到源代码的调试方法:

<br/>
<INPUT type="button" name="ad" onclick="charge();" value="change">
<br/>
<TEXTAREA rows="10" cols="30" id="ttt" name="ttt"></TEXTAREA>
<br/>
<INPUT type="button" name="findnode" onclick="findnode();" value="findnode">
<br/>
<INPUT type="button" name="openpath" onclick="openpath();" value="openpath">
<script>
    
function charge(){
        document.getElementById('ttt').value
=tree.getSelected().toHtml();
    }
    
    
function findnode(){
        tree.findChildByText(document.getElementById('ttt').value,
0);
    }
    
    
function openpath(){
        tree.openPath(webFXTreeHandler.htmlToText(document.getElementById('ttt').value),true);
        tree.getSelected().expand();
    }
</script>

在页面中放置如上代码.  注意,先要获得树的句柄.  比较创建树的时候,用如下代码:

var tree = new WebFXTree("<%=rootname%>");

在展开的树点,选择后, 点击change 按钮,可以得到这个节点对应的html代码.  然后对应html可以找到相应的CSS. 这个就不多写了.

xloadtree在调用子节点树的时候,和服务器之间传输的是xml.
DTD的定义如下
<!ELEMENT tree (tree*)>
<!ATTLIST tree
            text        CDATA    #REQUIRED
            src            CDATA    #IMPLIED
            action        CDATA    #IMPLIED
            icon        CDATA    #IMPLIED
            openIcon    CDATA    #IMPLIED
            target        CDATA    #IMPLIED
>

其中 text为显示文本,  src为下级目录目录的地址. action为点击的链接. icon为图标,openIcon为节点打开后的图标. target为目标,和a标签的target用法一样.


因为xml 文件不能传送< > 这种符号, 可以采用&lt; &gt; 传送.   因为项目里需要在树上显示HTML代码,所以在js里面做了修改.  修改的部分比较多. 还没有测试有没有意外情况. 这个以后再说.


还有, 在使用过程中,有一个BUG. 是设置tabindex的. 会出错.

this.setTabIndex(this.tabIndex); 

将xtree2.js文件中的这一行屏蔽掉就行了. 当然,先要确定你不需要使用tab键定位. :)


2006- 4- 22 增加:
  在要打开指定目录树的时候 如果树里面包含html代码, 可以用如下语句
<script>try{top.tree.tree.openPath(webFXTreeHandler.htmlToText("/北京新东方学校/<font color=red><b>留学考试</b></font>/fff"),true);}catch(err){}</script>


2006-5-19
前天在同事应用的时候,出现的问题是加载过程中如果树结点为中文,就加载不上. 后来找到问题的原因是在用servlet输出xml 的时候,是用的steam的方式, 后来改成字符输出方式才正确. 如下.

            PrintWriter out=response.getWriter();
            out.write(outputXML.toString());
            out.flush();
            out.close();


2008-09-03

关于随机参数,指的是URL请求中带有一个随机参数。 这个参数,可以是当前时间,或者随机数。 用来避开浏览器的缓存

 

posted on 2005-11-13 18:55 邓华的碎碎念 阅读(27774) 评论(113)  编辑  收藏
评论共2页: 上一页 1 2 

Feedback

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-15 16:28 zzb
你好,我从google里搜到你这篇文章,我也在网站上下了一个xloadtree的包.
我做了一个把数据库中取得的结果生成xml文件,在使用xloadtree,可以用.
我想请教你怎样可以取得节点的信息,因为当我取到了节点的信息,我可以通过该信息到数据库查找该节点包含的子节点并显示.
我说的可能不是太清楚,你能理解我的意思吗?可以告诉我一个解决的办法吗?  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-15 23:25 nickey's home
嗯? 你的意思是动态加载一个节点么? xloadtree就是干这个的. 你可以参考bbs.tol24.com 网站的左侧树实现.  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-16 10:24 zzb
是的,我是想动态加载一个节点,
我的想法如下
-root
|
|---1
|
|---2
| |
| |-----2.1
| |-----2.2
| |-----2.3
|
|---3
| |
| |-----3.1
| |-----3.2
| |-----3.3

在这个里面,当我点击节点2的时候,应该可以出现子节点2.1,2.2,2.3;点击节点3出现3的子节点,这样我需要判断鼠标点击的是节点2还是节点3在去生成对应的子节点.

var rti;
var tree = new WebFXTree("Root");
tree.add(new WebFXTreeItem("1"));
tree.add(new WebFXLoadTreeItem("2", "2.xml"));
tree.add(new WebFXLoadTreeItem("3", "3.xml"));
在这段代码中,testtree.xml这个地方必须指定一个xml的文件,我试过把
tree.add(new WebFXLoadTreeItem("2", "2.xml"));
改为
tree.add(new WebFXLoadTreeItem("2", "2.jsp?id=2"));
,通过2.jsp来生成节点2的子节点,这些节点都是从数据库取出来的,但这样就会报错,所以我现在只能自己写一个2.jsp的程序来生成2.xml文件,这样的话就导致了这个树不是动态的生成.
我这样说你可以理解吗,我想请教你我这个程序是不是写的有问题,或者思路本身就是不对的.谢谢你的回复.  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-16 10:33 zzb
我看了你说的那个网站,它里面用到了xtree2.css,xtree2.js,xloadtree2.js,我下载的xloadtree里没有这些文件,我把它们下载下来放到本地,测试那个网站的程序,

var tree = new WebFXTree("酷学社区","forumIndex.jspa");
tree.setTarget("content");

提示:无法识别setTarget该方法.我看了WebFXTree的api也没有这个方法,

var category119=new WebFXLoadTreeItem("直播课堂", "forumTreeControl!load.jspa?treeNode=119","category.jspa?categoryID=119");
category119.setTarget("content");
tree.add(category119);

上面这段代码,我的理解是,
节点名称:直播课堂
生成节点的文件:forumTreeControl!load.jspa?treeNode=119
action:category.jspa?categoryID=119
setTarget是将action的路径在网页的哪个位置打开
这样理解对吗?
如果这样理解正确的话,
tree.add(new WebFXLoadTreeItem("esport", "node.jsp?nodeid=2"));
这样写就是没有问题的.是这样的吗?  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-16 11:15 zzb
好了,我已经解决了这个问题,其实我只需要用jsp来生成一个xml文件即可,这样tree.add(new WebFXLoadTreeItem("esport", "node.jsp?nodeid=2"));就可以用了.  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-16 12:03 nickey's home
呵呵.整体思想还是很简单的.  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-21 16:36 hzqghost
请问,我想点击一个节点时关闭其他所有打开的节点,要怎么修改  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-22 11:51 jeafcn
已经在项目中使用了!  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-27 19:03 wds
遇到的两个问题:

1、我点开3个目录,那么重新load的时候,这三个目录自动展开。能不能自动展开最后一个,而不是全部3个,或者都不展开。

2、加载子目录的xml,里面的对象名称该怎么取,因为刷新之后我想把焦点还定位到已选择的目录。  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-27 21:03 cookie
他的cookie在哪里放着呀?  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-29 14:38 lip199162
tree.add(new WebFXLoadTreeItem("esport", "node.php?nodeid=2"));

我是按这种方法引用的,这里有几个问题想请教一下:

1.我的node.php可以生成我想要的XML而且格式没有问题,但这里 esport 结点不会展开,只出现一个没有任何内容的对话框,很郁闷。

2.我对XML文件不了解,没用过,下面是我的XML请教一下:

<?xml version="1.0"?>
<tree>
<tree text="1sub" action="plist.php" target="main"/>
</tree>

这个XML没有问题,但如果我改成
<tree text="中文" action="plist.php" target="main"/>
这时就出问题了,问题就出在中文字符上,难道它不支持中文?

如果我改成
<tree text="1sub" action="plist.php?mid=3&sid=6" target="main"/>
这时也出现了问题,错误信息显示 应有分号 实在不明白。

以上两点,请教一下,谢谢。

  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-29 16:38 nickey's home
TO lip199162

1) WebFXLoadTreeItem 这个我是用的三个参数. 没有出现问题.
这样 : new WebFXLoadTreeItem("<%=category.getName()%>", "forumTreeControl!load.jspa?treeNode=<%=category.getID()%>","category.jspa?categoryID=<%=category.getID()%>");

2) 可能和你网页的编码有关...  回复  更多评论
  

# re: 分析xloadtree, 用ajax实现的动态目录树 2006-03-29 18:07 lip199162
TO nickey's home

非常感谢你的帮助,关于我的第二个问题已经在你的帮助下解决了,谢谢你.

还是第一个问题,你提供的方法,可不可以详细些呀?

更重要的是 forumTreeControl!load.jspa

category.jspa 这两个文件是做什么用的,内容如何呀?

其实我的问题是,可以用 node.php?nodeid=2 生成相关 XML 文件, 但生成的XML如何才会自动被 WebFXLoadTreeItem 读入,调用呀?

谢谢你了  回复  更多评论
  

评论共2页: 上一页 1 2 

只有注册用户登录后才能发表评论。


网站导航: