zTree 可以实现异步加载。异步加载可以让初次加载速度快,带来好的用户体验。

异步加载 官方源码中的demo提示了例子。例子是采用php语言。

在java语言中,zTree如何与Servlet结合呢?

下面这个Demo演示了Servlet + Gson + MySQL 实现异步加载。

第一步,引入css和js,参考一上节《zTree

第二步,修改ztree初始方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var setting = {
    data : {
        simpleData : {
            enable : true
        }
    },
    async : {
        enable : true,
        url : "console/treeAjaxAsyncLoad.do",
        autoParam : [ "id=id" ],
        dataFilter : filter
    }
};
 
function filter(treeId, parentNode, childNodes) {
    if (!childNodes)
        return null;
    for (var i = 0, l = childNodes.length; i < l; i++) {
        childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
    }
    return childNodes;
}
 
$(document).ready(function() {
    $.fn.zTree.init($("#treeDemo"), setting);
 
});

关键代码在7~12行,配置异步加载功能,传递一个参数id给控制器treeAjaxAsyncLoad.do,控制器控制id查找所以子节点(直属子节点,孙子节点就没查找)

第三步,控制器

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.mysql.jdbc.StringUtils;
 
import dao.ArticleDao;
import util.JsonUtils;
 
/**
 * Servlet implementation class UserAjaxValidatingUser
 */
@WebServlet("/console/treeAjaxAsyncLoad.do")
public class TreeAjaxAsyncLoad extends HttpServlet {
 
    private static final long serialVersionUID = 1246470631076856023L;
 
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
 
        String pId = request.getParameter("id");
        ArticleDao dao = new ArticleDao();
 
        if (StringUtils.isNullOrEmpty(pId)) {
            JsonUtils.printJson(response, dao.getRootClassify());
        } else {
            JsonUtils.printJson(response, dao.getTrees(Integer.parseInt(pId)));
        }
 
    }
 
}

这部分代码是根据前端传递的参数,来查询子节点,并转换成json格式响应给前端。

JsonUtils.printJson()方法是将数据生成json格式。

代码如下:

1
2
3
4
5
6
7
8
9
public static void printJson(HttpServletResponse response, Object obj)
throws IOException {
    // 返回数据,返回数据类型是json
    response.setContentType("application/json");
    // 返回数据编码UTF-8
    response.setCharacterEncoding("UTF-8");
    // 返回数据,通过gson将数据返回给Ajax 通过gson工具提高工作效率
    response.getWriter().write(new Gson().toJson(obj));
}

第四步,数据访问层两个关键方法:

方法一:

1
2
3
4
5
6
7
8
9
10
@SuppressWarnings("unchecked")
public List<ArticleTree> getClassify(int id) {
    String sql = "SELECT id,pId,title as name FROM article where pId=?;";
    List<ArticleTree> list = JdbcUtils.getListBean(sql, ArticleTree.class, new Object[] { id });
 
    for (ArticleTree at : list) {
        at.setParent(isParent(at.getId()));
    }
    return list;
}

从数据库里查询数据封装成树结构对象。代码的第6~8行,设置是否为父节点,如果是父节点,在html上显示是一个文件夹,前面有加号,还可以展开,如果不是,在html上显示是一个文件且不可以展开。

方法二:

1
2
3
4
5
6
7
8
9
10
11
@SuppressWarnings("unchecked")
public List<ArticleTreeUrl> getTrees(int id) {
    String sql = "SELECT id,pId,title as name FROM article where pId=?;";
    List<ArticleTreeUrl> list = JdbcUtils.getListBean(sql, ArticleTreeUrl.class, new Object[] { id });
    for (ArticleTreeUrl at : list) {
        at.setParent(isParent(at.getId()));
        at.setUrl("console/article.jsp?id=" + at.getId());
        at.setTarget("_blank");
    }
    return list;
}

方法二和方法一样,都从数据库里查询数据封装成树结构对象。不同的是带查询参数,查找的是子节点。

本示例数据访问层使用apache的dbutils,读者根据自己的情况(原生JDBC、Spring JDBC、mybatis、Spring Data JPA)调整。

并且设置ztree的url。

ArticleTree和ArticleTreeUrl数据模型如下:

1
2
3
4
5
6
7
8
9
public class ArticleTree {
 
    private int id;
    private int pId;
    private String name;
    private int ParentFlags;
    boolean isParent;
     
    // 省略构造函数 访问器和修改器
1
2
3
4
5
6
7
8
9
10
11
public class ArticleTreeUrl {
 
    private int id;
    private int pId;
    private String name;
    private int ParentFlags;
    boolean isParent;
    private String url;
    private String target;
     
    // 省略构造函数 访问器和修改器

插件使用一树形插件---zTree一zTree异步加载的更多相关文章

  1. ztree学习之异步加载节点(一)

    ztreedemo.jsp: <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  2. 后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载

    如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...

  3. ztree异步加载---------补发周日内容

    上周六老师要求和大三的进行JAVA知识交流,总体来说就是给大三学长做的东西打分,然后大三学长再教我们如果构建ztree.毕竟第一次接触ztree,所以有很多不了解,但通过周六日努力,还是做出来了.现在 ...

  4. Jquery Ztree异步加载树

    1. 下载jquery的JS文件/ztree的CSS文件和JS文件 https://jquery.com/download/ https://gitee.com/zTree/zTree_v3/tree ...

  5. ztree插件异步加载 使用RESTEasy报错 Only resource methods using @FormParam will work as expected. Resource methods consuming the request body by other means will not work as expected.

    在使用ztree插件实现异步加载时遇到后台RESTEasy接收参数问题,查看后台报错: A servlet request to the URI http://localhost:8080/area/ ...

  6. ztree插件的使用及列表项拖拽的实现(jQuery)+异步加载节点数据

    为了实现如图所示的树状结构图,并使列表项可拖动到盒子里,研究了ztree这个插件的使用,并仔细研究了列表项的拖动事件.完成了预期需求,对jQuery的运用得到了提高.这个插件的功能非常强大,除了基本的 ...

  7. 使用jOrgChart插件, 异步加载生成组织架构图

    jOrgChart插件是一个用来实现组织结构图的Jquery的插件- 一.特点 1.支持拖拽修改子节点: 2.支持节点缩放展示: 3.方便修改css定义样式: 4.超轻量型: 5.兼容性好,基本支持所 ...

  8. Ztree异步加载自动展开节点

    在Ztree的官网Demo中,有自动展开的例子,是通过设置节点属性open:true来实现自动展开的,但是在异步加载中,这个属性设置为true也不会自动展开,因为open:true是指在有子节点的情况 ...

  9. JQuery ztree 异步加载实践

    本来要做一个文件目录浏览界面,需要遍历所有的文件和目录,很显然一次性读取时很费时费力的一件事情. 因此就需要做异步加载.... 不过网上的几篇帖子还挺坑的!原始参考:JQuery异步加载实例,相对来说 ...

随机推荐

  1. 20165221 Linux安装及命令入门学习

    安装过程 按照图文教程,进行操作,遇到如下问题. 1.安装ubuntu时从官网下载不成功. 最后在同学的帮助下,通过中文版网址入口进入,完成下载. 2.BIOS未恢复出厂设置,导致不能选择64-bit ...

  2. 查找轮廓(cv2.findCountours函数)

    1.输入为二值图像,黑色为背景,白色为目标 2.该函数会修改原图像,因此若想保留原图像在,则需拷贝一份,在拷贝图里修改. 一.查找轮廓 cv2.findContours() 三个输入参数:输入图像(二 ...

  3. DAC杂谈二 ——ADC和DAC常用技术术语

    采集时间 采集时间是从释放保持状态(由采样-保持输入电路执行)到采样电容电压稳定至新输入值的1 LSB范围之内所需要的时间.采集时间(Tacq)的公式如下: 混叠 根据采样定理,超过奈奎斯特频率的输入 ...

  4. python中的正则表达式--re模块

    参考博客:https://www.cnblogs.com/tina-python/p/5508402.html 这里说一下python的re模块即正则表达式模块,先列出其中涉及到的各种字符和模式等: ...

  5. 深入理解 sudo 与 su 之间的区别【转】

    深入理解 sudo 与 su 之间的区别 两个命令的最大区别是: sudo 命令需要输入当前用户的密码,su 命令需要输入 root 用户的密码.另外一个区别是其默认行为.sudo 命令只允许使用提升 ...

  6. python3+selenium入门08-鼠标事件

    使用click()可以模拟鼠标的左键点击事件,现在的web页面中有很多其他的鼠标交互方式,比如鼠标右击.双击.悬停.鼠标拖放等功能.在WebDriver中,将这些关于鼠标操作的方法封装在ActionC ...

  7. ASP.NET MVC5入门3之登录验证

    参考: HTML页面模版: http://www.ui.cn/detail/70262.html(第38个) MVC后台代码参考: http://www.oschina.net/p/nfine 开发环 ...

  8. ASP.NET MVC5高级编程 之 视图

    1.1理解视图约定 当创建一个项目模版时,可以注意到,项目以一种非常具体的方式包含了一个结构化的Views目录.在每一个控制器的View文件夹中,每一个操作方法都有一个同名的视图文件与其对应.这就提供 ...

  9. Jmeter之响应结果乱码解决

    场景: 在测试过程中,我们可能需要查看结果树,但是发现里面的响应数据在“Document”以外的其他表现形式下都有乱码,如下图就是设置了以Text的形式展示,响应数据包含乱码: 分析:原因是Jmete ...

  10. 正版phpstorm,webstorm,goland(Jetbrains系列都可以)免费激活步骤(图文详解)(亲测有效)

    1 前言 Jetbrains系列都可以,包括webstrom,phpstorm,goland等. 附加其它方案如下: webstrom(注册机) goland(破解补丁) 2 步骤 1. 可以先试用, ...