2008-01-30
使用dhtmlxtree时所遇到的问题及对应策略
关键字: dhtmlxtree 解决方案
小弟水平不高,所以一直努力中,请前辈们不吝赐教
----------------------------------------------------------------------
1. 在action中调用service类,并将xml文件写入对应的xml文件夹
然后将这个path传递过去,作为生成xml文件的一个参数,指出其应当存储的位置。
2. 在登录的时候需要对xml文件夹进行遍历,查看是否有以用户名命名的xml文件是否存在,如果存在则解析该xml文件,并将其显示为一棵动态树。如果没有则调用service方法获得该用户的功能权限或其他的权限,将其生成为一个xml文件,并保存在对应的xml文件夹。
如果改动了用户的权限,则也要更改对应的xml文件,并将其重新保存。
3. 困扰2天的dhtmlxtree树图标不显示的问题终于搞定了。
由于系统结构如下
---WebRoot
---codebase
---imgs
---privmanag
---inc
---treemenu.jsp
Treemenu.jsp页面中的设置如下
4. 在给包含富选框的树进行操作的时候,需要使用什么样的dhtmlxtree函数以及如何将已经被checked的节点的ID传递出来
首先在javascript里使用dhtmlxtree的函数来获取一个选中节点的ID的数组。
// 获得所有选中的节点的id
tree.getAllChecked();
//获得所有选中的那个节点的分支
tree.getAllCheckedBranches();
然后我们解决怎么将这个数组变量传递出来,提供给Action类来使用呢?
找来找去,发现是不可能的,因为javascript是运行在客户端的,而servlet是运行在服务端的,是无法进行通信的,除非用到AJAX技术进行异步的通信,但是我又不会。还有2种手段能达到相同的效果,一个是使用一个隐藏域,将JAVASCRIPT的变量赋给它,然后提交,在另一个jsp页面里使用request.getParameter();来获得;另一个是将获得的变量作为参数通过URL的形式传递出去。结合实际项目的情况,我选择了后者,唯一可能麻烦的是,不知道这个参数的长度是多少?如果太多了就麻烦了。
最后就能得到了正确的URL了,然后调用对应的action处理类来进行处理就可以了。
【扩充点是可以同时把共有多少选项的个数传递出去。】
这只是我的一些做项目时的遇到的问题,请前辈们给出一些更好的解决方案,谢谢!!!
----------------------------------------------------------------------
1. 在action中调用service类,并将xml文件写入对应的xml文件夹
String path = this.servlet.getServletContext().getRealPath(“/”)+”xml”;
然后将这个path传递过去,作为生成xml文件的一个参数,指出其应当存储的位置。
OutputFormat outFmt = new OutputFormat(“ ”,true); XMLWriter xmlWriter = new XMLWriter(new FileWriter(path+”\\tee.xml”),outFmt);
2. 在登录的时候需要对xml文件夹进行遍历,查看是否有以用户名命名的xml文件是否存在,如果存在则解析该xml文件,并将其显示为一棵动态树。如果没有则调用service方法获得该用户的功能权限或其他的权限,将其生成为一个xml文件,并保存在对应的xml文件夹。
如果改动了用户的权限,则也要更改对应的xml文件,并将其重新保存。
File dir = new File(path); File[] files = dir.listFiles(); //然后遍历这个目录,找到以某个用户名命名的xml文件
3. 困扰2天的dhtmlxtree树图标不显示的问题终于搞定了。
由于系统结构如下
doc 写道
---WebRoot
---codebase
---imgs
---privmanag
---inc
---treemenu.jsp
Treemenu.jsp页面中的设置如下
<link rel="STYLESHEET" type="text/css" href="codebase/dhtmlxtree.css">
<script src="codebase/dhtmlxcommon.js"></script>
<script src="codebase/dhtmlxtree.js"></script>
<script>
tree=new dhtmlXTreeObject("treeboxbox_tree","100%","100%",0);
//set the image's path
//默认使用dhtmlxtree的winstyle风格
tree.setImagePath("imgs/");
...
4. 在给包含富选框的树进行操作的时候,需要使用什么样的dhtmlxtree函数以及如何将已经被checked的节点的ID传递出来
首先在javascript里使用dhtmlxtree的函数来获取一个选中节点的ID的数组。
// 获得所有选中的节点的id
tree.getAllChecked();
//获得所有选中的那个节点的分支
tree.getAllCheckedBranches();
然后我们解决怎么将这个数组变量传递出来,提供给Action类来使用呢?
找来找去,发现是不可能的,因为javascript是运行在客户端的,而servlet是运行在服务端的,是无法进行通信的,除非用到AJAX技术进行异步的通信,但是我又不会。还有2种手段能达到相同的效果,一个是使用一个隐藏域,将JAVASCRIPT的变量赋给它,然后提交,在另一个jsp页面里使用request.getParameter();来获得;另一个是将获得的变量作为参数通过URL的形式传递出去。结合实际项目的情况,我选择了后者,唯一可能麻烦的是,不知道这个参数的长度是多少?如果太多了就麻烦了。
function getIdArray()
{
var aa = new Array();
var ss = openURL();
aa = ss.split(",");
//alert(aa[0]);
//alert(aa.length-1);
alert(aa);
var sss="****.do?";
for(var i=0;i<aa.length-1;i++)
{
//var str = parseInt(aa[i]);
var str = aa[i];
if(i==(aa.length-2))
{
sss = sss+"str"+i+"="+str;
}
else
{
alert(str);
sss = sss+"str"+i+"="+str+"&";
}
alert(sss);
}
alert(sss);
//alert(aa);
}
最后就能得到了正确的URL了,然后调用对应的action处理类来进行处理就可以了。
【扩充点是可以同时把共有多少选项的个数传递出去。】
这只是我的一些做项目时的遇到的问题,请前辈们给出一些更好的解决方案,谢谢!!!
- 13:37
- 浏览 (844)
- 评论 (3)
- 分类: Ajax&Javascript&XML
- 相关推荐
评论
laitaogood
2008-08-03
回复
引用
hailxo 前天 删除
你好,请问有没有碰到过个别图标不显示的情况——我的树里面前一到两个菜单项的图标不显示还请不吝赐教
你好,请问有没有碰到过个别图标不显示的情况——我的树里面前一到两个菜单项的图标不显示还请不吝赐教
请您参考《使用dhtmlxtree时所遇到的问题及对应策略》第三点
laitaogood
2008-01-30
回复
更改一下,发现一个dhtmlxtree的小BUG
描述如下:如果是点父节点的话,除了会生成一个选中节点的ID数组,还会在最后生成一个","号,所以说如果直接转为javascript里的数组的话,可能最后传过去的是""了,而点击子节点生成的ID列表则不会出现这样的情况.
以下是改进的代码
这下不会出错了,呵呵
描述如下:如果是点父节点的话,除了会生成一个选中节点的ID数组,还会在最后生成一个","号,所以说如果直接转为javascript里的数组的话,可能最后传过去的是""了,而点击子节点生成的ID列表则不会出现这样的情况.
以下是改进的代码
function getIdArray()
{
var aa = new Array();
var bb = new Array();
var ss = openURL();
var sss = null;
aa = ss.split(",");
//alert(aa[0]);
//alert(aa.length-1);
//alert(aa);
//如果选中的节点所组成的数组的最后一项为空
//这是dhtmlxtree的一个小BUG,如果是点子节点,则返回的是没有","的
//如果是点父节点,则返回的是没有","号的
if(aa[aa.length-1] == "")
{
//alert("The last is null");
for(var j=0;j<aa.length-1;j++)
{
bb[j]=aa[j];
}
//alert(bb);
if(aa.length == 1)
{
alert("请选择要授权的选项");
return false;
}
sss="****.do?count="+(bb.length);
for(var i=0;i<bb.length;i++)
{
//var str = parseInt(aa[i]);
var str = bb[i];
if(i==(bb.length-1))
{
sss = sss+"&str"+i+"="+str;
}
else
{
//alert(str);
sss = sss+"&str"+i+"="+str;
}
//alert(sss);
}
}
else
{
if(aa.length == 1)
{
alert("请选择要授权的选项");
return false;
}
sss="****.do?count="+(aa.length);
for(var i=0;i<aa.length;i++)
{
//var str = parseInt(aa[i]);
var str = aa[i];
if(i==(aa.length-1))
{
sss = sss+"&str"+i+"="+str;
}
else
{
//alert(str);
sss = sss+"&str"+i+"="+str;
}
//alert(sss);
}
}
//alert(sss);
window.location = sss;
//alert(aa);
}
这下不会出错了,呵呵
发表评论
我的相册
080217-233033516
共 12 张
共 12 张
最近加入圈子
链接
最新评论
-
基于Ext的在线即时聊天系 ...
联想 ideaPad Y430A-TTH 处理器型号 Intel 奔腾双核 T ...
-- by laitaogood -
基于Ext的在线即时聊天系 ...
Y430A-TTH 5690
-- by laitaogood -
基于Ext的在线即时聊天系 ...
IdeaPad Y430A-TTH 6,299 联想天逸 F41M- ...
-- by laitaogood -
基于Ext的在线即时聊天系 ...
<html> <head> <title>博客后台管理& ...
-- by laitaogood -
基于Ext的在线即时聊天系 ...
http://download.csdn.net/sort/tag/%E6%B5 ...
-- by laitaogood







评论排行榜