ztree java 异步_使用 zTree 异步加载
使用 zTree 异步加载
使用场景
可能需要展示类别很多,如果采用直接加载的方式,需要展示的数据量过大,交互十分不友好。所以采用 zTree 异步加载数据。
demo 环境
SpringBoot 1.5.9.RELEASE , 使用 jsp
war
org.springframework.boot
spring-boot-starter-parent
1.5.9.RELEASE
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.apache.tomcat
tomcat-servlet-api
8.5.28
provided
javax.servlet
javax.servlet-api
org.apache.tomcat.embed
tomcat-embed-jasper
javax.servlet
jstl
导入 zTree 所需的 css 和 js ,导入到 resources/static 下
jsp 代码
Created by IntelliJ IDEA.
User: lvhaosir
Date: 2018/12/12
Time: 8:52
To change this template use File | Settings | File Templates.
--%>
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
index
var basePath = '';
Ztree异步加载使用例子
var setting = {
async: {
enable: true,
url: basePath + "ztree/asyncGetNodes",
autoParam:["id"],
dataFilter: filter
},
data:{
simpleData:{
enable: true,
idKey:'id',
pIdKey:'pid',
rootPId: 0
}
},
view:{
showIcon: false
}
};
$(document).ready(function(){
initZTree();
});
function filter(treeId, parentNode, childNodes) {
return childNodes;
}
//初始化树
function initZTree(){
$.ajax({
url:basePath + "ztree/getNodes",
type:"post",
dataType: "json",
success: function(data){
console.log(data);
var zTreeObj = $.fn.zTree.init($("#zTree"),setting, data);
//让第一个父节点展开
var rootNode_0 = zTreeObj.getNodeByParam('pid',0,null);
zTreeObj.expandNode(rootNode_0, true, false, false, false);
},
error: function(){
}
});
}
Java 代码
model
package cn.lvhaosir.ztree.model;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* @Author: lvhaosir
* @Date: 2018/12/12 9:09
* @Version 1.0
*/
@Data
@AllArgsConstructor
public class Node {
private String id;
/**
* 父节点 id
*/
private String pid;
private String name;
/**
* 是否展开
*/
private String open;
/**
* 是否为父节点(下面是否还有分类)
*/
private String isParent;
}
controller
PageController
package cn.lvhaosir.ztree.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @Author: lvhaosir
* @Date: 2018/12/12 8:50
* @Version 1.0
*/
@Controller
@RequestMapping("/page")
public class PageController {
/**
* 跳转界面
* @return
*/
@RequestMapping(value="/{filename}")
public String toPage(@PathVariable(value="filename") String filename){
System.out.println("filename:"+filename);
return filename;
}
/**
* 跳转界面
* @return
*/
@RequestMapping(value="/{folder}/{filename}")
public String toPage(@PathVariable(value="folder") String folder,@PathVariable(value="filename") String filename){
System.out.println("folder:"+folder +" filename:"+filename);
return folder+"/"+filename;
}
}
ZtreeController
package cn.lvhaosir.ztree.controller;
import cn.lvhaosir.ztree.model.Node;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: lvhaosir
* @Date: 2018/12/12 9:10
* @Version 1.0
*/
@Controller
@RequestMapping("/ztree")
public class ZtreeController {
@RequestMapping("/getNodes")
@ResponseBody
public List getNodes() {
List nodeList = new ArrayList();
nodeList.add(new Node("1","0","一级菜单1","false","true"));
nodeList.add(new Node("10","1","二级菜单1","false","true"));
nodeList.add(new Node("11","1","二级菜单2","false","true"));
nodeList.add(new Node("12","1","二级菜单3","false","true"));
nodeList.add(new Node("2","0","一级菜单2","false","true"));
nodeList.add(new Node("20","2","二级菜单21","false","true"));
nodeList.add(new Node("21","2","二级菜单22","false","true"));
nodeList.add(new Node("22","2","二级菜单23","false","true"));
return nodeList;
}
@RequestMapping("/asyncGetNodes")
@ResponseBody
public List asyncGetNodes(String id) throws InterruptedException {
List nodeList = new ArrayList();
if("10".equals(id)){
nodeList.add(new Node("100",id,"三级菜单1","false","true"));
nodeList.add(new Node("101",id,"三级菜单2","false","false"));
} else if ("11".equals(id)) {
nodeList.add(new Node("102",id,"三级菜单21","false","false"));
nodeList.add(new Node("103",id,"三级菜单22","false","true"));
} else if ("12".equals(id)) {
nodeList.add(new Node("104",id,"三级菜单31","false","false"));
nodeList.add(new Node("105",id,"三级菜单32","false","false"));
}
Thread.sleep(2000);
return nodeList;
}
}
菜单树就能正确展示出来了。
实际使用场景
在我们实际的场景应该是,有一个根据菜单父 id 查询菜单的接口,页面首先进去加载顶级菜单,一般也就是 pid=0 的菜单,然后点击节点,传递该节点的 id 异步向后台查询子菜单来进行异步加载。
ztree java 异步_使用 zTree 异步加载相关推荐
- vue 如何处理两个组件异步问题_Vue异步组件处理路由组件加载状态的解决方案...
vue.js 组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 在大型单页面应用中,处于对性能的考虑和首屏加载速度的要求,我们一般 ...
- Cesium 实战 - 最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层
Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层 遇到问题 初始化底图 初始化高程(监听载入完成事件,开启关闭高程) 初始化 3dtile 在线示例 Cesiu ...
- java 找不到或无法加载主类- 解决方案
java 找不到或无法加载主类- 解决方案 参考文章: (1)java 找不到或无法加载主类- 解决方案 (2)https://www.cnblogs.com/caibixiang123/p/1170 ...
- java找不到或无法加载主类_java找不到或无法加载主类如何解决?解决方法
相信有很多人都遇到过java找不到或无法加载主类的这个问题,那么这究竟是什么原因造成的呢?有什么方法可以解决这个问题吗? 问题: java文件导入到一个包当中,之后在class文件当中加入一张图片; ...
- Vue—核心概念—异步组件和路由懒加载
原文地址:Vue 异步组件&路由懒加载 目录 异步组件 异步组件介绍 异步组件声明 高级异步组件 路由懒加载 路由懒加载介绍 路由懒加载方法 把组件按组分块 异步组件 异步组件介绍 在开发大型 ...
- servlet异步_如何使用异步Servlet来提高性能
servlet异步 这篇文章将描述一种性能优化技术,该技术适用于与现代Web应用程序相关的常见问题. 如今的应用程序不再只是被动地等待浏览器发起请求,而是希望自己开始通信. 一个典型的示例可能涉及聊天 ...
- vue——懒加载(异步延迟和彻底懒加载)
vue项目优化之懒加载 引入问题 一.默认: 异步延迟加载 结果图解 二.彻底懒加载(手动配置) 步骤 1. 实现异步延迟加载的两步 2. 配置脚手架,去掉prefetch 结果图解 引入问题 单页面 ...
- ztree点击展开/收缩 按钮分级加载,解决数据量过大加载缓慢
有些项目的组织机构足足有六七万多条数据,加载十分缓慢,所考虑做成分级加载. 由于本项目的ztree的树节点的点击事件已经被占用(加载组织人员),所以考虑使用ztree的 展开/收缩 (onExpand ...
- java 内部类 加载_举例讲解Java的内部类与类的加载器
内部类 class A { //Inner1 要在 A 初始化后 才能使用,即要被A的对象所调用 class Inner1 { int k = 0; // static int j = 0; //A加 ...
最新文章
- UML应用开发详解--视频
- 2011 总结 2012 计划
- MyEclipse8.5注册码 到2015年
- LeetCode----13. 罗马数字转整数
- 解决:java.lang.IllegalStateException: ApplicationEventMulticaster not initialized
- 谷歌浏览器如何如何禁用弹出窗口阻止程序
- HDU3549+Ford-Fulkerson
- HP刀片服务器C7000-Cisco网络模块配置指南
- 《linux设备驱动开发详解》笔记——14 linux网络设备驱动
- Atitit 常用的登录认证法 目录 2. 表单验证	1 3. OAuth 认证	1 4. Web票据模式验证	1 4.1. Token验证	1 4.2. Cookie-Session 认证	1
- Atititjs h5调用摄像头视频聊天 拍照功能 相机功能 录像attilax总结
- 既是手机直播投屏工具又是安卓模拟器?游戏主播和手游玩家都来了解一下
- ngix反向代理配置
- 内定抽奖小程序_微信抽奖助手怎么中奖 无需作弊照样中奖
- php百度优化,百度技术沙龙第 24 期 PHP 性能优化实践
- 游戏音乐制作中需要使用那些软件?
- PCIE操作基础原理
- C语言PAT刷题 - 1027 打印沙漏
- windows突破百度云上传限速
- 关于Keil ARM版本和Keil C51版本的共存问题(亲测通过)