`
丁丁豆
  • 浏览: 74549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转】 dhtmlxTree 10分钟做一个树

阅读更多

项目中要做个分类树和部门树。

架构师让用dhtmlxTree 做个树出来。以前也没写过树。也不知道怎么做。

下载了dhtmlxTree 组件包。网上找了两篇文档看了看。一句话看了半天也看不出来个所以然。

妈的那些文档不解决实际问题。。真他妈的蛋疼。。自己动手丰衣足食。。自己动手写。。写好了忘了没写文档。写个文档已被后患。。希望对能用到的朋友有所帮助 。。10分钟绝对能学会 。。下面有文档。。后面附上的是源码。。完全拷贝改改就能用。。

 

目前试用版本:v2.6 Standard Edition

使用说明如下:

1、解压当前目录下 dhtmlxTree.zip 文件,得到如下文件夹和文件:

 ----解压目录
  - dhtmlxConnector
  - dhtmlxDataProcessor
  - dhtmlxTree
  - docsExplorer
  - libCompiler
  - index.html
  - License_GPL.html
  - readme.txt

2、将dhtmlxTree开发所需文件加入到项目工程中。

   拷贝解压出来的“dhtmlxTree”文件夹到doxenter-maven\src\main\webapp\resources下。

3、为了在项目中方便使用dhtmlxTree,需要将dhtmlxTree的libary、css引入到项目页面中。

   在doxenter-maven\src\main\webapp\WEB-INF\velocity\common\macro路径下的changyong.vm页面中,加入如下代码:

   <link href="#springUrl('/resources/dhtmlxTree/dhtmlxtree.css')" rel="stylesheet" type="text/css" charset="UTF-8" />
   <script src="#springUrl('/resources/dhtmlxTree/dhtmlxcommon.js')" type="text/javascript" charset="UTF-8"></script>
   <script src="#springUrl('/resources/dhtmlxTree/dhtmlxtree.js')" type="text/javascript" charset="UTF-8"></script>

   一句话引入需要用到的css和js其中js和css的引入路径必须根据实际相对路径,否则引用无效。

4、页面中dhtmlxTree的使用:

  
   【添加DIV】在开发页面中添加一个DIV,用来展示Tree,代码如下:

   <div id="category_tree" style="width:280px; height:320px;border:1px solid Silver;"></div>

   注意:该DIV中id是必须的,id的值是自定义的,如以上代码的DIV中id="category_tree" 。
   【dhtmlxTree的初始化和加载】

    创建并初始化dhtmlxTree,代码如下:

     <script type="text/javascript">
     var tree = new dhtmlXTreeObject('category_tree', '100%', '100%', 0);   // 创建dhtmlxTree对象
         tree.setSkin('dhx_skyblue');  // 设置皮肤样式
         tree.setImagePath('#springUrl("/resources/dhtmlxTree/imgs/csh_bluefolders/")'); // 设置样式所需的图像位置
            tree.enableDragAndDrop(0);  // 设置拖拽 0:不允许拖拽
     ......
     ...... 以下代码省略
     ......
     </script>  

        其中, var tree = new dhtmlXTreeObject('category_tree', '100%', '100%', 0); 代码中:

        构造方法中:

  第一个参数:“category_tree”必须与<DIV>中的id值对应;
  第二个参数: 树的宽度为100%;
  第三个参数: 树的高度为100%;
  第四个参数: 树的根节点ID的值为0;

    dhtmlxTree对象创建好以后,需要加载数据,加载的方式有很多种,我们这里以读取XML文件为例。
    在以上代码后加入一下代码:

          tree.setXMLAutoLoading('#springUrl("/index/loadCategoryXMLTree")');  // 默认动态加载
       tree.loadXML('#springUrl("/index/loadCategoryXMLTree")');  // 从xml一次加载

          其中:'#springUrl("/index/loadCategoryXMLTree")'是调用后台返回XML数据文件的URL

    若要使用dhtmlxTree的其他数据加载方式,请参考dhtmlxTree的API等相关文档。

 

下面是源码

/**
  * <p>获取所有的部门并生成tree</p>
  * @param response
  * @throws Exception
  */

/** 系统初始化的部门根节点ID=0 PID=0 */
 private static final int DEPARTMENT_ROOT_ID = 0;
 @RequestMapping(method = RequestMethod.GET)
 public void loadDepartmentXMLTree(HttpServletResponse response)
   throws Exception{
  
  Document document = DocumentHelper.createDocument();//创建document 
  Element xmlRoot = document.addElement("tree").addAttribute("id", "-1");//xml根节点
  Element departmentRoot = null; //部门根节点
  List<Department> list = departmentService.get();//得到部门list 按降序排列
  if(list != null && list.size()>0){//当获取的集合不为null并且结合大小大于0

   DepartmentTree departmentTree = new DepartmentTree();//创建departmentTree 对象此类是
   //按ID升序遍历部门List
   for(int i = 1;i<list.size(); i++){
    Department department = list.get(list.size() - i);
    //如果是部门根节点,则追加到xml根节点下
    //如果是部门的子节点,用visitor模式进行xml遍历生成子部门
    if(department.getId() == DEPARTMENT_ROOT_ID){
     departmentRoot = xmlRoot.addElement("item");
     departmentRoot.addAttribute("text", department.getName());
     departmentRoot.addAttribute("id", String.valueOf(department.getId()));
     departmentRoot.addAttribute("pid",String.valueOf(department.getPid()));
     departmentRoot.addAttribute("open", "1"); //默认展开第一级子部门
    } else {
     departmentTree.setDepartment(department);
     departmentRoot.accept(departmentTree);// 利用dom4j的visitor模式遍历xml文件生成子部门节点
    }
   }
  }
  // 设置缓存
  response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
  response.setHeader("Pragma","no-cache"); //HTTP 1.0
  response.setDateHeader("Expires", 0);
  //设置文档类型和编码UTF-8
  response.setContentType("text/xml");
  PrintWriter writer = response.getWriter();
  OutputFormat format = OutputFormat.createPrettyPrint();
  format.setEncoding("UTF-8");
  // 生成XML
  XMLWriter xmlWriter = new XMLWriter(writer, format);
  xmlWriter.write(document);
  xmlWriter.flush();
 }

此类DepartmentTree 必须继承VisitorSupport  并且重写visit 方法

public class DepartmentTree extends VisitorSupport {

 private Department department;
 /**
  * 取得当前部门的父部门ID,与xml文档中部门ID比较,
  * 如果相等则将当前部门挂在xml文档对应父部门下
  */

 @Override
 public void visit(Element node){
  if(node.attributeValue("id").equals(String.valueOf(this.department.getPid()))){
   Element element = node.addElement("item");
   element.addAttribute("text", this.department.getName());
   element.addAttribute("id", String.valueOf(this.department.getId()));
   element.addAttribute("pid", String.valueOf(this.department.getPid()));
  }
 }
 
 public Department getDepartment() {
  return department;
 }


 public void setDepartment(Department department) {
  this.department = department;
 }
}

//页面代码

<script type="text/javascript">

  var tree = new dhtmlXTreeObject('treeboxbox_tree', '100%', '100%', -1);
    tree.setSkin('dhx_skyblue');
    tree.setImagePath('#springUrl("/resources/dhtmlxTree/imgs/csh_bluefolders/")');
    tree.enableDragAndDrop(0);
 // loadXML
    tree.setXMLAutoLoading('#springUrl("/department/loadDepartmentXMLTree")');
    tree.loadXML('#springUrl("/department/loadDepartmentXMLTree")');
</script>

 //下面是做好后的效果图

分享到:
评论

相关推荐

    dhtmlxtree的一个实用demo

    【标题】"dhtmlxtree的一个实用demo"指的是一个基于dhtmlxtree的示例应用,这个示例可能展示了如何在网页中实现交互式的树形数据结构,用于展示层次化的信息,比如目录结构、组织架构或者权限管理等。dhtmlxtree是一...

    dhtmlXtree树 右dhtmlXtree键菜单

    1. **初始化dhtmlXtree对象**:首先,你需要在HTML中定义一个div元素作为树的容器,并在JavaScript中实例化dhtmlXtree对象,设置必要的配置,如数据源、节点样式等。 2. **定义右键菜单**:使用dhtmlXtree的`...

    dhtmlxtree

    `dhtmlxtree` 是一个基于JavaScript的富客户端树形组件,它允许在Web应用程序中创建交互式的、可扩展的树状视图。这个组件由DHTMLX Suite提供,它是一个广泛使用的JavaScript UI库,包含一系列用于构建富客户端界面...

    dhtmlxTree

    **dhtmlxTree** 是一个强大的JavaScript库,用于在Web应用程序中创建交互式的树形视图。这个控件允许开发者构建可自定义的、功能丰富的树结构,适用于数据的分类和展示,例如导航菜单、文件系统模拟或者组织结构图。...

    专业版dhtmlxtree下载

    dhtmlxtree是一款基于JavaScript的开源树形菜单控件,专为Web开发人员设计,用于在网页中构建交互式、可扩展的树状结构。它提供了丰富的功能和自定义选项,使得用户界面更加直观和易于操作。这款专业版dhtmlxtree在...

    dhtmlXTree1.6

    **dhtmlXTree1.6** 是一个基于JavaScript的组件,用于在Web应用程序中创建交互式的树状结构。这个组件允许开发者以动态和灵活的方式展示层次化的数据,常见于网站的导航菜单、文件系统或者组织架构等场景。...

    Dhtmlxtree的例子

    总的来说,Dhtmlxtree是一个强大且灵活的JavaScript树形控件,通过XML数据的加载,可以方便地构建出具有多层次结构的界面元素,适用于各种类型的Web应用。这个例子展示了其基础用法,但Dhtmlxtree的强大之处远不止于...

    dhtmlxTree v.3.0

    例如,当用户点击一个节点时,可以触发一个函数来加载与该节点相关的详细信息,或者在拖放操作中重新组织数据结构。 4. **扩展组件集成** 在压缩包中,我们看到了如dhtmlxConnector、dhtmlxDataProcessor等其他...

    dhtmlxtree实例

    总结起来,dhtmlxtree是一个强大且灵活的JavaScript树形控件,通过其复选框、右键菜单和拖放功能,能够满足各种复杂的Web界面设计需求。开发者可以通过深入理解和熟练运用其API,创建出高效、易用的用户界面。

    dhtmlxtree例子

    使用`new dhtmlXTreeObject("bodydata","100%","100%",0)`创建一个树对象,其中"bodydata"是树的容器ID,"100%"分别代表宽度和高度,0表示不显示图标。 3. **设置图片路径**: `setImagePath("&lt;%=imgPath%&gt;common...

    dhtmlxTree 2.1

    dhtmlxTree 2.1 版本是该组件的一个特定版本,具有优化的性能和一些增强的功能。 **1. 树形结构** dhtmlxTree允许开发者在网页上创建层次化的数据展示,如目录结构、组织架构或导航菜单。每个节点都可以包含子节点...

    JS树:dhtmlxTree

    `readme.txt`可能包含了关于如何开始和版本信息等内容,而`index.html`通常是一个示例页面,展示了dhtmlxTree的不同功能和用法。 总之,dhtmlxTree是JavaScript开发者构建交互式树形结构的强大工具,它提供了丰富的...

    基于dhtmlxtree构建动态维护树

    在示例中,`deletenode`函数会在用户选择一个节点并点击删除按钮时被调用,`addchild`函数则在用户输入新节点信息并提交时触发,这些事件处理函数负责与服务器进行通信并更新界面。 6. **树节点操作**: - **删除...

    DhtmlxTree

    dhtmlx公司的系列组件包括以下几个,此处只上传的是其中的树控件: 包含dhtmlxTree(树型控件),dhtmlxTabbar(选项卡),dhtmlxGrid(数据表格),dhtmlxCombo(下拉选项),dhtmlxTreeGrid(树型表格),dhtmlxVault(文件上传控件...

Global site tag (gtag.js) - Google Analytics