- 浏览: 191713 次
- 性别:
- 来自: 深圳
最新评论
-
shis_y:
那是你的localhost或者web服务器的80端口被占用或者 ...
通过虚拟地址解决fckeditor错误的加载/fckeditor/fckstyles.xml -
forcer521:
com.gemt.dataswap.util.Constant ...
使用DES算法进行加密和解密 -
ngn9999:
dTree确实不错,这是我的使用经验: http://www. ...
javascript树型菜单(Dtree和Xtree) -
yueliangwolf:
这个dhtmlxtree.js里面有enableSmartXM ...
使用xml或者json方式生成dhtmlxtree -
yanMouse:
谢谢,能否有个联系方式,我现在也在看这方面的东西
dhtmlxtree的一个实用demo
1. dao
private static ParameterizedRowMapper<MenuInfo> menuInfoMapper = new ParameterizedRowMapper<MenuInfo>() {
public MenuInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
MenuInfo menuInfo = new MenuInfo();
menuInfo.setHasit(rs.getString("hasit"));
menuInfo.setPmenuid(rs.getLong("pmenuid"));
menuInfo.setLevel(rs.getLong("level"));
menuInfo.setId(rs.getLong("id"));
menuInfo.setMsrtno(rs.getLong("msrtno"));
menuInfo.setMenunm(rs.getString("menunm"));
menuInfo.setLocation(rs.getString("location"));
menuInfo.setActiontyp(rs.getLong("actiontyp"));
menuInfo.setHlpid(rs.getLong("hlpid"));
menuInfo.setLfabl(rs.getString("lfabl"));
menuInfo.setFbdst(rs.getString("fbdst"));
return menuInfo;
}
};
public Collection<MenuInfo> testPrivilege() {
final String sql = "select nvl((select 'a' from wpv0105_rlprv b where b.lbl='0' and b.rlid=? and b.prvid=a.id),'b') as hasit, "
+" a.pmenuid,level, a.id, a.msrtno, a.menunm, a.location, a.actiontyp, a.hlpid, a.lfabl,a.fbdst "
+" from wpv0101_menu a start with pmenuid=-1 connect by prior id = pmenuid and a.id<>100031401 "
+" group by pmenuid,level, id, msrtno, menunm, location, actiontyp, hlpid, lfabl,fbdst "
+" order by id||'0', msrtno";
return jdbcTemplate.query(sql, menuInfoMapper, new Object[]{new Long(0)});
}
2. 数据封装
(1) xml
@Test public void testMenu() throws Exception {
java.util.Collection<MenuInfo> menuInfoList = mobileDao.testPrivilege();
java.io.OutputStream out = null;
java.io.OutputStreamWriter dataout = null;
out = new java.io.FileOutputStream("aaa.xml");
dataout = new java.io.OutputStreamWriter(out, "UTF-8");
dataout.write("<?xml version='1.0' encoding='UTF-8'?>\n<tree id='0'>");
int level=0;
for(MenuInfo vo : menuInfoList)
{
if(level == Integer.parseInt(vo.getLevel()+"")) {
dataout.write("</item>\r\n");
final String chk = "a".equals(vo.getHasit())?"checked=\"1\"":"";
dataout.write("<item " + chk + " text=\""+ vo.getMenunm() +"\" id=\"" + vo.getId() + "\" im0=\"leaf.gif\" im1=\"folderOpen.gif\" im2=\"folderClosed.gif\">");
}
else if(Integer.parseInt(vo.getLevel()+"") > level) {
final String chk = "a".equals(vo.getHasit())?"checked=\"1\"":"";
dataout.write(" <item " + chk + " text=\""+ vo.getMenunm() +"\" id=\"" + vo.getId() + "\" im0=\"leaf.gif\" im1=\"folderOpen.gif\" im2=\"folderClosed.gif\">");
}
else {
for(int i =0; i < level + 1 - Integer.parseInt(vo.getLevel()+""); i++)
dataout.append("</item>\r\n");
final String chk = "a".equals(vo.getHasit())?"checked=\"1\"":"";
dataout.write("<item " + chk + " text=\""+ vo.getMenunm() +"\" id=\"" + vo.getId() + "\" im0=\"leaf.gif\" im1=\"folderOpen.gif\" im2=\"folderClosed.gif\">");
}
level = Integer.parseInt(vo.getLevel()+"");
}
for(int j =0; j <level; j++)
dataout.write("</item>\r\n");
dataout.write("</tree>");
dataout.flush();
dataout.close();
out.close();
}
(2) json
@Test public void testMenuJSON() throws Exception {
java.util.Collection<MenuInfo> menuInfoList = mobileDao.testPrivilege();
java.io.OutputStream out = null;
java.io.OutputStreamWriter dataout = null;
out = new java.io.FileOutputStream("bbb.JSON");
dataout = new java.io.OutputStreamWriter(out, "UTF-8");
dataout.write("{id:'0' ");
int level=0;
for(MenuInfo vo : menuInfoList)
{
if(level == Integer.parseInt(vo.getLevel()+"")) {
dataout.write("}\r\n");
final String chk = "a".equals(vo.getHasit())?"checked:'1', ":"";
dataout.write(",{" + "id:'" + vo.getId()+ "', " + chk + "text:'"+ vo.getMenunm() + "', im0:'leaf.gif', im1:'folderOpen.gif', im2:'folderClosed.gif'");
}
else if(Integer.parseInt(vo.getLevel()+"") > level) {
final String chk = "a".equals(vo.getHasit())?"checked:'1', ":"";
dataout.write(", item:[{" + "id:'" + vo.getId()+ "', " + chk + "text:'"+ vo.getMenunm() + "', im0:'leaf.gif', im1:'folderOpen.gif', im2:'folderClosed.gif'");
}
else {
for(int i =0; i < level - Integer.parseInt(vo.getLevel()+""); i++)
dataout.append("}\r\n]\r\n");
final String chk = "a".equals(vo.getHasit())?"checked:'1', ":"";
dataout.write("}\r\n,{" + "id:'" + vo.getId()+ "', " + chk + "text:'"+ vo.getMenunm() + "', im0:'leaf.gif', im1:'folderOpen.gif', im2:'folderClosed.gif'");
}
level = Integer.parseInt(vo.getLevel()+"");
}
for(int j =0; j <level; j++)
dataout.write("}]\r\n");
dataout.write("}");
dataout.flush();
dataout.close();
out.close();
}
3. 我对比了一下,若不使用专业版的dhtmltree的情况下,都加载大数据,使用xml和json的速度一样慢,几乎没有区别。主要还是渲染生成树的计算太复杂,若使用专业版(太贵了,都要800多美元),并把它的 tree.enableSmartXMLParsing(true) 因为它在你查看该节点时才加载它的子节点,所以树能很快显示,它还有一点做的特别好就是在树的有些节点没有被加载的情况下,通过tree.getAllChecked()也能够获取到这些节点。
private static ParameterizedRowMapper<MenuInfo> menuInfoMapper = new ParameterizedRowMapper<MenuInfo>() {
public MenuInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
MenuInfo menuInfo = new MenuInfo();
menuInfo.setHasit(rs.getString("hasit"));
menuInfo.setPmenuid(rs.getLong("pmenuid"));
menuInfo.setLevel(rs.getLong("level"));
menuInfo.setId(rs.getLong("id"));
menuInfo.setMsrtno(rs.getLong("msrtno"));
menuInfo.setMenunm(rs.getString("menunm"));
menuInfo.setLocation(rs.getString("location"));
menuInfo.setActiontyp(rs.getLong("actiontyp"));
menuInfo.setHlpid(rs.getLong("hlpid"));
menuInfo.setLfabl(rs.getString("lfabl"));
menuInfo.setFbdst(rs.getString("fbdst"));
return menuInfo;
}
};
public Collection<MenuInfo> testPrivilege() {
final String sql = "select nvl((select 'a' from wpv0105_rlprv b where b.lbl='0' and b.rlid=? and b.prvid=a.id),'b') as hasit, "
+" a.pmenuid,level, a.id, a.msrtno, a.menunm, a.location, a.actiontyp, a.hlpid, a.lfabl,a.fbdst "
+" from wpv0101_menu a start with pmenuid=-1 connect by prior id = pmenuid and a.id<>100031401 "
+" group by pmenuid,level, id, msrtno, menunm, location, actiontyp, hlpid, lfabl,fbdst "
+" order by id||'0', msrtno";
return jdbcTemplate.query(sql, menuInfoMapper, new Object[]{new Long(0)});
}
2. 数据封装
(1) xml
@Test public void testMenu() throws Exception {
java.util.Collection<MenuInfo> menuInfoList = mobileDao.testPrivilege();
java.io.OutputStream out = null;
java.io.OutputStreamWriter dataout = null;
out = new java.io.FileOutputStream("aaa.xml");
dataout = new java.io.OutputStreamWriter(out, "UTF-8");
dataout.write("<?xml version='1.0' encoding='UTF-8'?>\n<tree id='0'>");
int level=0;
for(MenuInfo vo : menuInfoList)
{
if(level == Integer.parseInt(vo.getLevel()+"")) {
dataout.write("</item>\r\n");
final String chk = "a".equals(vo.getHasit())?"checked=\"1\"":"";
dataout.write("<item " + chk + " text=\""+ vo.getMenunm() +"\" id=\"" + vo.getId() + "\" im0=\"leaf.gif\" im1=\"folderOpen.gif\" im2=\"folderClosed.gif\">");
}
else if(Integer.parseInt(vo.getLevel()+"") > level) {
final String chk = "a".equals(vo.getHasit())?"checked=\"1\"":"";
dataout.write(" <item " + chk + " text=\""+ vo.getMenunm() +"\" id=\"" + vo.getId() + "\" im0=\"leaf.gif\" im1=\"folderOpen.gif\" im2=\"folderClosed.gif\">");
}
else {
for(int i =0; i < level + 1 - Integer.parseInt(vo.getLevel()+""); i++)
dataout.append("</item>\r\n");
final String chk = "a".equals(vo.getHasit())?"checked=\"1\"":"";
dataout.write("<item " + chk + " text=\""+ vo.getMenunm() +"\" id=\"" + vo.getId() + "\" im0=\"leaf.gif\" im1=\"folderOpen.gif\" im2=\"folderClosed.gif\">");
}
level = Integer.parseInt(vo.getLevel()+"");
}
for(int j =0; j <level; j++)
dataout.write("</item>\r\n");
dataout.write("</tree>");
dataout.flush();
dataout.close();
out.close();
}
(2) json
@Test public void testMenuJSON() throws Exception {
java.util.Collection<MenuInfo> menuInfoList = mobileDao.testPrivilege();
java.io.OutputStream out = null;
java.io.OutputStreamWriter dataout = null;
out = new java.io.FileOutputStream("bbb.JSON");
dataout = new java.io.OutputStreamWriter(out, "UTF-8");
dataout.write("{id:'0' ");
int level=0;
for(MenuInfo vo : menuInfoList)
{
if(level == Integer.parseInt(vo.getLevel()+"")) {
dataout.write("}\r\n");
final String chk = "a".equals(vo.getHasit())?"checked:'1', ":"";
dataout.write(",{" + "id:'" + vo.getId()+ "', " + chk + "text:'"+ vo.getMenunm() + "', im0:'leaf.gif', im1:'folderOpen.gif', im2:'folderClosed.gif'");
}
else if(Integer.parseInt(vo.getLevel()+"") > level) {
final String chk = "a".equals(vo.getHasit())?"checked:'1', ":"";
dataout.write(", item:[{" + "id:'" + vo.getId()+ "', " + chk + "text:'"+ vo.getMenunm() + "', im0:'leaf.gif', im1:'folderOpen.gif', im2:'folderClosed.gif'");
}
else {
for(int i =0; i < level - Integer.parseInt(vo.getLevel()+""); i++)
dataout.append("}\r\n]\r\n");
final String chk = "a".equals(vo.getHasit())?"checked:'1', ":"";
dataout.write("}\r\n,{" + "id:'" + vo.getId()+ "', " + chk + "text:'"+ vo.getMenunm() + "', im0:'leaf.gif', im1:'folderOpen.gif', im2:'folderClosed.gif'");
}
level = Integer.parseInt(vo.getLevel()+"");
}
for(int j =0; j <level; j++)
dataout.write("}]\r\n");
dataout.write("}");
dataout.flush();
dataout.close();
out.close();
}
3. 我对比了一下,若不使用专业版的dhtmltree的情况下,都加载大数据,使用xml和json的速度一样慢,几乎没有区别。主要还是渲染生成树的计算太复杂,若使用专业版(太贵了,都要800多美元),并把它的 tree.enableSmartXMLParsing(true) 因为它在你查看该节点时才加载它的子节点,所以树能很快显示,它还有一点做的特别好就是在树的有些节点没有被加载的情况下,通过tree.getAllChecked()也能够获取到这些节点。
- b.rar (114.3 KB)
- 下载次数: 487
评论
2 楼
yueliangwolf
2010-07-12
这个dhtmlxtree.js里面有enableSmartXMLParsing(true)这个方法吗?有的话发我一个,找了好多,都没有这个方法...
1 楼
filix
2009-02-07
谢谢分享!看了真是豁然开朗!
发表评论
-
kdb+/q
2008-11-28 20:13 1911因为一个项目接触了kdb+/q, kdb+/q的执行速度应该 ... -
seam随笔
2008-09-28 20:33 1209前段时间,因为客户的一个项目接触了seam,客户那边在 ... -
richfaces换肤
2008-08-27 23:18 0http://leonardinius.blogspot.co ... -
jfree chart...
2008-08-17 11:38 0see attachment. -
crystal report
2008-08-04 21:57 0crystal report http://oceang-y. ... -
js code example
2008-07-01 16:25 0<html> <body> <s ... -
dhtmlgoodies网站上的一些js,也许在工作中用得到
2008-06-23 16:28 1537到http://www.dhtmlgoodies.com ... -
Hibernate的一个例子
2008-05-31 23:32 1092通过hibernate tools的反向工程从数据库产生ent ... -
在cxf基础上整的一个框架
2008-04-24 08:48 1102使用cxf作为webservice的服务器,以spring b ... -
S60签名
2008-04-16 17:14 1516前段时间写了一个程序,放到S60第三版的手机系统上面老是报权限 ... -
socket消息超时重发的设想
2008-04-08 17:00 4062我们经常遇到的一个问题就是:发送一条消息,若在T秒内没有 ... -
io,nio和操作系统命令性能比较
2008-03-31 20:50 2269package org.clarance; import j ... -
要开始做一个网络的项目了
2008-03-27 22:38 1321一个在线环境监测的项目, 监控中心用java编写,接受现 ... -
使用jQuery解决portal登陆慢的问题
2007-12-19 16:58 2272因为portal中的好几块地方(portlet)取数据比较慢, ... -
使用javascript遍历XML文件并显示
2007-12-10 17:11 6686以下代码在IE和Firefox上测试通过: <html& ... -
JSON技术实战
2007-12-07 09:23 11052JSON作为一种信息的载体 ... -
使用HttpClient对web应用进行测试
2007-11-29 16:19 2964在几天程序突然报出了数据库连接被管理员销毁的情况! 一时之间也 ... -
判断日期是否有效的正则表达式
2007-09-10 17:59 1245function isValidDate(dateStr, f ... -
取oracle的error code
2007-08-30 15:39 2830有时候需要知道oracle的error code的具体含义, ... -
JFreeChart生成图片并显示
2007-08-28 09:51 3022源代码在附件中, 部署到sevlet容器中, 通过URL访问s ...
相关推荐
5. **XML/JSON支持**:可以使用XML或JSON格式的数据来构建树结构,这使得数据交换更加灵活和高效。 **与JSON的应用** 在描述中提到的“dhtmlxtree和json的应用”,指的是dhtmlxtree可以通过JSON(JavaScript Object...
总的来说,`dhtmlxtree`、`servlet`和`jdom`的结合使用,为我们提供了一种高效、灵活的方式,动态地从数据库生成交互式的树形视图,尤其适用于需要展示层级关系的数据场景。无论是在传统的Java Web应用还是现代的MVC...
该控件具有高度的自定义性,可以轻松地与后端服务器进行数据交互,支持XML、JSON等多种数据格式。 **二、复选框功能** dhtmlxtree的复选框功能使得用户可以选择多个树节点,这在多选场景下非常实用。通过配置相关...
在本文中,我们将深入探讨如何使用DhtmlXTREE生成一棵完整的目录树,主要涉及以下几个关键步骤: 1. **数据准备**: 在示例中,数据来源于数据库,首先通过`ComponentFavorFactory`类将数据库中的收藏夹信息转换成...
- **数据加载**:通过XML或JSON格式的数据文件,或者直接通过JavaScript代码动态加载树的结构。 - **事件监听**:注册事件处理器,以响应用户的交互行为,如`onSelect`、`onOpen`等。 - **API操作**:利用提供的API...
dhtmlxtree 核心在于它的XML或JSON数据结构,通过这些数据定义了树的结构和每个节点的信息。它使用HTML、CSS和JavaScript实现动态效果,提供了丰富的API和事件机制,允许开发者自定义行为和外观。 ### 二、右键菜单...
同时,熟悉MVC模式、RESTful API设计原则和JSON/XML数据格式将有助于更好地理解和使用这个项目。此外,对于前端开发,理解DOM操作和事件处理也是必要的,因为DHTMLX Tree的大部分交互功能都是通过JavaScript实现的。...
这些组件的组合使用,能够构建出功能强大的Web应用程序,例如,使用dhtmlxGrid展示数据,dhtmlxTree作为导航,dhtmlxLayout来规划页面布局,dhtmlxMenu提供操作菜单,而所有数据交互都通过Ajax技术实现,保证了页面...
这些方法接受一个URL,服务器返回XML或JSON格式的数据。 4. **操作节点**:dhtmltree提供了丰富的API,如`openNode`(展开节点)、`closeNode`(关闭节点)、`selectNode`(选中节点)、`unselectNode`(取消选中...
在Web开发中,JavaScript Tree组件通常需要与XML、JSON或其他数据格式配合使用,以动态加载和展示数据。描述中提到的"xml格式比较容易在后台生成",这表明该组件支持XML作为数据源,XML因其结构清晰,易于解析和生成...
对于更复杂的需求,`dhtmlxTree`支持自定义节点样式和图标,以及使用JSON数据格式。还可以实现拖放功能,使得用户可以自由调整节点的位置。 总的来说,`dhtmlxTree`是一款强大且灵活的JS树形菜单组件,它提供了丰富...
3. **数据绑定**:根据JSP应用的需求,可以通过Ajax请求从服务器获取JSON或XML格式的数据,并将数据加载到树控件中。 4. **事件绑定**:注册事件处理器,对用户的操作做出响应,如记录选中节点、执行相关业务逻辑等...