`
clarancepeng
  • 浏览: 191713 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用xml或者json方式生成dhtmlxtree

阅读更多
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()也能够获取到这些节点。
  • b.rar (114.3 KB)
  • 下载次数: 487
分享到:
评论
2 楼 yueliangwolf 2010-07-12  
这个dhtmlxtree.js里面有enableSmartXMLParsing(true)这个方法吗?有的话发我一个,找了好多,都没有这个方法...
1 楼 filix 2009-02-07  
谢谢分享!看了真是豁然开朗!

相关推荐

    dhtmlxtree

    5. **XML/JSON支持**:可以使用XML或JSON格式的数据来构建树结构,这使得数据交换更加灵活和高效。 **与JSON的应用** 在描述中提到的“dhtmlxtree和json的应用”,指的是dhtmlxtree可以通过JSON(JavaScript Object...

    dhtmlxtree动态从表中生成树,通过servlet,jdom,dhtmlxtree生成树

    总的来说,`dhtmlxtree`、`servlet`和`jdom`的结合使用,为我们提供了一种高效、灵活的方式,动态地从数据库生成交互式的树形视图,尤其适用于需要展示层级关系的数据场景。无论是在传统的Java Web应用还是现代的MVC...

    dhtmlxtree实例

    该控件具有高度的自定义性,可以轻松地与后端服务器进行数据交互,支持XML、JSON等多种数据格式。 **二、复选框功能** dhtmlxtree的复选框功能使得用户可以选择多个树节点,这在多选场景下非常实用。通过配置相关...

    DhtmlXTREE控件应用

    在本文中,我们将深入探讨如何使用DhtmlXTREE生成一棵完整的目录树,主要涉及以下几个关键步骤: 1. **数据准备**: 在示例中,数据来源于数据库,首先通过`ComponentFavorFactory`类将数据库中的收藏夹信息转换成...

    dhtmlxTree v.2.0 Professional edition build 81009/81107

    - **数据加载**:通过XML或JSON格式的数据文件,或者直接通过JavaScript代码动态加载树的结构。 - **事件监听**:注册事件处理器,以响应用户的交互行为,如`onSelect`、`onOpen`等。 - **API操作**:利用提供的API...

    dhtmlxtree 的右键菜单

    dhtmlxtree 核心在于它的XML或JSON数据结构,通过这些数据定义了树的结构和每个节点的信息。它使用HTML、CSS和JavaScript实现动态效果,提供了丰富的API和事件机制,允许开发者自定义行为和外观。 ### 二、右键菜单...

    dhtmlxtree_servlet_src

    同时,熟悉MVC模式、RESTful API设计原则和JSON/XML数据格式将有助于更好地理解和使用这个项目。此外,对于前端开发,理解DOM操作和事件处理也是必要的,因为DHTMLX Tree的大部分交互功能都是通过JavaScript实现的。...

    dhtmlxGrid,dhtmlxGrid,dhtmlxTree,dhtmlxLayout,dhtmlxMenu,ajax

    这些组件的组合使用,能够构建出功能强大的Web应用程序,例如,使用dhtmlxGrid展示数据,dhtmlxTree作为导航,dhtmlxLayout来规划页面布局,dhtmlxMenu提供操作菜单,而所有数据交互都通过Ajax技术实现,保证了页面...

    dhtmltree生成树js

    这些方法接受一个URL,服务器返回XML或JSON格式的数据。 4. **操作节点**:dhtmltree提供了丰富的API,如`openNode`(展开节点)、`closeNode`(关闭节点)、`selectNode`(选中节点)、`unselectNode`(取消选中...

    javascript tree

    在Web开发中,JavaScript Tree组件通常需要与XML、JSON或其他数据格式配合使用,以动态加载和展示数据。描述中提到的"xml格式比较容易在后台生成",这表明该组件支持XML作为数据源,XML因其结构清晰,易于解析和生成...

    功能齐全的JS树形菜单

    对于更复杂的需求,`dhtmlxTree`支持自定义节点样式和图标,以及使用JSON数据格式。还可以实现拖放功能,使得用户可以自由调整节点的位置。 总的来说,`dhtmlxTree`是一款强大且灵活的JS树形菜单组件,它提供了丰富...

    dhtmltree控件

    3. **数据绑定**:根据JSP应用的需求,可以通过Ajax请求从服务器获取JSON或XML格式的数据,并将数据加载到树控件中。 4. **事件绑定**:注册事件处理器,对用户的操作做出响应,如记录选中节点、执行相关业务逻辑等...

Global site tag (gtag.js) - Google Analytics