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异步加载的更多相关文章
-
ztree学习之异步加载节点(一)
ztreedemo.jsp: <%@ page language="java" import="java.util.*" pageEncoding=&qu ...
-
后台返回平铺数据,如何转换成树形json并渲染树形结构,ant tree 异步加载
如何后台返回对象数组(平铺式) 1.根据字段标识(板块)获取根节点 ### initTreeData(dataOrg){ var resultArr=dataOrg[0] var secArr=[]; ...
-
ztree异步加载---------补发周日内容
上周六老师要求和大三的进行JAVA知识交流,总体来说就是给大三学长做的东西打分,然后大三学长再教我们如果构建ztree.毕竟第一次接触ztree,所以有很多不了解,但通过周六日努力,还是做出来了.现在 ...
-
Jquery Ztree异步加载树
1. 下载jquery的JS文件/ztree的CSS文件和JS文件 https://jquery.com/download/ https://gitee.com/zTree/zTree_v3/tree ...
-
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/ ...
-
ztree插件的使用及列表项拖拽的实现(jQuery)+异步加载节点数据
为了实现如图所示的树状结构图,并使列表项可拖动到盒子里,研究了ztree这个插件的使用,并仔细研究了列表项的拖动事件.完成了预期需求,对jQuery的运用得到了提高.这个插件的功能非常强大,除了基本的 ...
-
使用jOrgChart插件, 异步加载生成组织架构图
jOrgChart插件是一个用来实现组织结构图的Jquery的插件- 一.特点 1.支持拖拽修改子节点: 2.支持节点缩放展示: 3.方便修改css定义样式: 4.超轻量型: 5.兼容性好,基本支持所 ...
-
Ztree异步加载自动展开节点
在Ztree的官网Demo中,有自动展开的例子,是通过设置节点属性open:true来实现自动展开的,但是在异步加载中,这个属性设置为true也不会自动展开,因为open:true是指在有子节点的情况 ...
-
JQuery ztree 异步加载实践
本来要做一个文件目录浏览界面,需要遍历所有的文件和目录,很显然一次性读取时很费时费力的一件事情. 因此就需要做异步加载.... 不过网上的几篇帖子还挺坑的!原始参考:JQuery异步加载实例,相对来说 ...
随机推荐
-
杭电ACM 素数判定
素数判定 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
-
[转帖]流程控制:for 循环
流程控制:for 循环 http://wiki.jikexueyuan.com/project/linux-command/chap34.html need more study need more ...
-
066、Weave如何与外网通信?(2019-04-09 周二)
参考https://www.cnblogs.com/CloudMan6/p/7500550.html Weave是一个私有的vxlan网络,默认与外部网络隔离.外部网络如何才能访问到weave中的 ...
-
Java第02次实验提纲(Java基本语法与类库)
1. 熟悉Git 1.1 学会使用网页版的操作代码仓库(gitee) 申请账号,然后根据老师提供的链接或者二维码加入团队,然后修改昵称. fork老师提供的代码库项目,新建自己学号命名的文件并上传一些 ...
-
代理设计模式 (静态代理设计模式)+ 动态代理(JDK和Cglib)
一.代理设计模式 1.设计模式:前人总结一套解决特定问题的代码 2.代理设计模式优点: 2.1 保护真实对象 2.2 让真实对象职责更明确 2.3 扩展 3.代理设计模式 3.1 真实对象(老总) 3 ...
-
20155227 2016-2017-2 《Java程序设计》第五周学习总结
20155227 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 语法与继承架构 使用try...catch JVM会尝试执行try区块中的程序代码,如果发生 ...
-
Android 如何在Eclipse 引入外部纯Java项目(不是打成Jar使用)
应用情景--如标题: 在Eclipse的 “Android启动项目”中引入“外部的纯Java项目”,能运行的只有是基于Android的测试代码才可以. 一直很纳闷,如果外部写好一个Java插件(例如服 ...
-
Java-Runoob-高级教程-实例-数组:06. Java 实例 – 数组获取最大和最小值
ylbtech-Java-Runoob-高级教程-实例-数组:06. Java 实例 – 数组获取最大和最小值 1.返回顶部 1. Java 实例 - 数组获取最大和最小值 Java 实例 以下实例 ...
-
RPN网络
Region Proposal Network RPN的实现方式:在conv5-3的卷积feature map上用一个n*n的sliding window(论文中n=3)生成一个长度为256(ZF网络 ...
-
正则表达式 IP域名
不废话,我这个起码不坑人,有的把我坑死 var objRegExp = /^((([1-9]|([1-9]\d)|(1\d\d)|(2([0-4]\d|5[0-5]))))\.)((([0-9]|([ ...