ztree实现异步加载(点击节点,请求后台数据,添加数据到对应节点)真正实现了异步树加载数据

2023-11-16

ztree实现异步加载

首先说一下这篇文章和我写的上一篇异步树的区别:

上一篇的我实现的是其实是个伪异步加载,因为我实际是把异步的操作写在了节点上面,点击节点时,获取当前节点的ID,取回子节点的数据,然后手动拼接到当前节点下面。

真正的异步其实是应该点击树前面的"+"号,然后用zTree自带的异步功能请求后台(也就是我上一篇存在疑问的地方),获取数据后自动拼接到当前请求的节点。

好了,直接上代码,我现在用的框架是SpringBoot+thymeleaf,写法还是差不多的。

页面代码:treeList.html 引入文件注意改成自己需要的写法

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8" />
    <title>Insert title here</title>

    <!-- thymeleaf引入模板写法 jsp用jsp引入写法即可 -->
    <script type="text/javascript" th:src="@{/jq/jquery-1.7.2.js}" src="../static/jq/jquery-1.7.2.js"></script>
    <script type="text/javascript" th:src="@{/ztree/jquery.ztree.all-3.5.js}" src="../static/ztree/jquery.ztree.all-3.5.js"></script>
    <script type="text/javascript" th:src="@{/ztree/jquery.ztree.core-3.5.js}" src="../static/ztree/jquery.ztree.core-3.5.js"></script>
    <script type="text/javascript" th:src="@{/ztree/ztreeBranchExt.js}" src="../static/ztree/ztreeBranchExt.js"></script>
    <link   type="text/css" rel="stylesheet" th:href="@{/ztree/zTreeStyle.css}" href="../static/ztree/zTreeStyle.css">

</head>
<body>
<h2>树列表</h2>
<body>
<div style="width:15%;">
    <ul id="demotree" class="ztree"></ul>
</div>
</body>

<script th:inline="javascript">
    /*<![CDATA[*/
    var setting = {//初始化树设置
            isSimpleData : true, //数据是否采用简单 Array 格式,默认false
            treeNodeKey : "id", //在isSimpleData格式下,当前节点id属性
            treeNodeParentKey : "pId", //在isSimpleData格式下,当前节点的父节点id属性
            showLine : true, //是否显示节点间的连线
                        async:{//异步设置
                        enable: true,
                        type:"get",
                        url: "/SpringBoot/tree/asyncTree",
                        autoParam: ["id"],
                        dataType: "text",
                        //异步返回结果集处理(必须返回json数据)
                        dataFilter: function(treeId, parentNode, responseData){
                            return responseData;
                           /* var  treeNodes = eval(responseData);
                            return treeNodes;
                            */
                        }
                    },
    callback :{
        onClick : function(event, treeId, treeNode, clickFlag) {//树节点点击事件  根据业务自己定义
            alert(1);
        }
        //,onAsyncSuccess: filter
    },
    //checkable : true //每个节点上是否显示 CheckBox
    };

    var zTree;
    var treeNodes;
    var list = [[${trees}]];//获取初始化页面时的数据  //JSP需要换成JSP自己的写法
    treeNodes = eval(list);

    //初始化节点
    $(document).ready(function(){
        $.fn.zTree.init($("#demotree"), setting, treeNodes);
    });

    /*]]>*/
</script>

</body>
</html>

对比上一篇异步树的文章可以发现,代码少了很多,真正的异步其实是可以减少很多操作的。

controller层代码:TreeController.java 我这里改成了先进入controller,再跳转回页面。
当然也可以继续沿用我上篇文章的写法,先进入页面,用ajax请求后台加载初始化树。
package com.luoj.springboot.controller.Tree;

import com.alibaba.fastjson.JSON;
import com.github.pagehelper.PageInfo;
import com.luoj.springboot.controller.Result;
import com.luoj.springboot.entity.User;
import com.luoj.springboot.entity.tree.Tree;
import com.luoj.springboot.service.tree.ITreeService;
import com.luoj.springboot.service.user.impl.UserService;
import com.luoj.springboot.utils.PageUtils;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

@RestController
@RequestMapping("/tree")
public class TreeController {

    @Resource
    private ITreeService treeService;

    /**
     * 初始化页面接口
     * @param request
     * @return
     */
    @RequestMapping(value="/getTree",method = RequestMethod.GET)
    public ModelAndView getTree(HttpServletRequest request){
        ModelAndView mv = new ModelAndView();
        String pid = request.getParameter("id");
        if(pid == null || pid == ""){//初始化节点的时候  默认查询最顶级的节点  即pid=0
            pid="0";
        }
        List<Tree> list = treeService.getTree(pid);//取出树的数据
        for(int i=0;i<list.size();i++){
           /**
             * 这里可以多加一层查询,用当前节点去数据库取下级节点的数据,如果有下级节点的数据,就setIsParent为1,对应页面
             * 上的图标前面就会有个+号  没有的话设置为0  也就不能继续请求下一级了
             */
            list.get(i).setIsParent(1);//我这里是默认都有下一级  可以根据自己的业务写
        }
        String treeJson = JSON.toJSONString(list);
        mv.addObject("trees",treeJson);
        mv.setViewName("/tree/treeList");
        return mv;
    }

    /**
     * 异步请求接口
     * @param request
     * @return
     */
    @RequestMapping(value="/asyncTree",method = RequestMethod.GET)
    public String asyncTree(HttpServletRequest request){
        String pid = request.getParameter("id");
        if(pid == null || pid == ""){//初始化节点的时候  默认查询最顶级的节点  即pid=0
            pid="0";
        }
        List<Tree> list = treeService.getTree(pid);
        for(int i=0;i<list.size();i++){
        /**
             * 这里可以多加一层查询,用当前节点去数据库取下级节点的数据,如果有下级节点的数据,就setIsParent为1,对应页面
             * 上的图标前面就会有个+号  没有的话设置为0  也就不能继续请求下一级了
             */
            list.get(i).setIsParent(1);//我这里是默认都有下一级  可以根据自己的业务写
        }
        String treeJson = JSON.toJSONString(list);//必须是json格式的数据
        //[
        // {"id":2,"isParent":0,"name":"软件工程学院","pId":1},{"id":3,"isParent":0,"name":"国际贸易学院","pId":1},
        // {"id":4,"isParent":0,"name":"土木工程学院","pId":1},{"id":5,"isParent":0,"name":"机电学院","pId":1}
        // ]
        return treeJson;
    }
}

zTree实体类:Tree.java

package com.luoj.springboot.entity.tree;

public class Tree {

    private int id;//本级ID
    private int pId;//父ID
    private String name;
    private int isParent;//1 是父级  0不是父级
    private String icon;//自定义图标

	//get...
	//set...
}

页面效果:

在这里插入图片描述
ps:这里可能会显示不出来树的图标和样式。因为我这里引入的文件还包含了自带的图标icon。
解决办法:把外部JS和CSS的引入

<script type="text/javascript" th:src="@{/ztree/jquery.ztree.all-3.5.js}" src="../static/ztree/jquery.ztree.all-3.5.js"></script>
<script type="text/javascript" th:src="@{/ztree/jquery.ztree.core-3.5.js}" src="../static/ztree/jquery.ztree.core-3.5.js"></script>
<script type="text/javascript" th:src="@{/ztree/ztreeBranchExt.js}" src="../static/ztree/ztreeBranchExt.js"></script>
<link   type="text/css" rel="stylesheet" th:href="@{/ztree/zTreeStyle.css}" href="../static/ztree/zTreeStyle.css">

替换成我上一篇异步树文章的引入

<script type="text/javascript" src="static/js/jquery-1.7.2.js"></script> 
<link type="text/css" rel="stylesheet" href="plugins/zTree/3.5/zTreeStyle.css"/> 
<script type="text/javascript" src="plugins/zTree/2.6/jquery.ztree-2.6.min.js"></script> 
<script type="text/javascript" src="plugins/zTree/3.5/jquery.ztree.core-3.5.js"></script>

同样还是去http://www.treejs.cn/v3/api.php 下载对应的文件即可,注意对应版本号。
想和我用同样版本的可以去自己下载图标icon或者私信我,我把图标icon发给你,这里我不知道怎么上传图标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ztree实现异步加载(点击节点,请求后台数据,添加数据到对应节点)真正实现了异步树加载数据 的相关文章

随机推荐

  • 木马制作——图片木马制作

    木马制作 图片木马制作 一 简单说明 图片木马指的是图片格式的文件木马 图片格式包括jpg png等 原理是将木马程序和图片捆绑在一起 达到伪装的目的 程序可以是脚本语言或者编译语言 在web渗透中 通常将脚本编写的webshell和图片合
  • janus以及coturncentos8的配置_排错填坑完结篇

    前言 查阅了不少资料 网上对janus以及coturn的配置比比皆是 不过 我发现了一个问题 那就是 janus要直接对接coturn作为turn服务器吗 为什么 janus的demo例子 譬如 video room 能不能在手机4g网络上
  • netty文件上传断点续传的演示

    Netty文件上传断点续传的演示 一 理论和协议规范和工具类等 1 实现原理 netty文件上传采用自定义的协议方式实现 断点续传主要是依据RandomAccessFile类的随机读写能力 主要流程是客户端发起请求 将需要上传文件名称 路径
  • Leetcode[数组] 分发饼干 -- 贪心算法

    0 题目描述 leetcode原题链接 分发饼干 1 预排序 双指针 利用贪心算法的思想 每次都先满足胃口最小的孩子 直到有效饼干分完 或者小胃口孩子都被满足则停止分发 class Solution def findContentChild
  • 区块链浏览器搭建

    嗨喽 大家好 不知道大家是否遇见过类似的问题 自己使用以太坊源代码搭建了一个开发网私链时 缺少了主网或者测试网的区块链浏览器这种区块链数据直观展示的工具 那么今天就带大家一起搭建一个适合自己的区块链浏览器使用 文章目录 一 环境准备 1 1
  • 利用BFD协议提高SD-WAN网络的故障收敛时间

    BFD简介 为了减小设备故障对业务的影响 提高网络的可用性 设备需要能够尽快检测到与相邻设备间的通信故障 以便能够及时采取措施 从而保证业务继续进行 现有的故障检测方法主要包括以下几种 1 硬件检测 例如通过SDH Synchronous
  • 第三章 C++之面向对象

    C 基础进阶系列文章 目录 第一章 C 之函数 第二章 C 之引用实现游戏对话框显示 第三章 C 之面向对象 第二章 C 之面向对象 C 基础进阶系列文章 前言 一 什么是面向对象 二 抽象与类 1 C 中的类 2 类的声明 3 创建第一个
  • Java基础知识总结(史上最全)

    Java基础知识总结 写代码 1 明确需求 我要做什么 2 分析思路 我要怎么做 1 2 3 3 确定步骤 每一个思路部分用到哪些语句 方法 和对象 4 代码实现 用具体的java语言代码把思路体现出来 学习新技术的四点 1 该技术是什么
  • openssl编程指南

    openssl编程指南 对于openssl应用编程这方面的详细文档很少 我是通过认真分析openssl源码包中的示例代码来学习并结合man文档来理解它的基本结构的 SSL通讯模型为标准的C S结构 除了在TCP层之上进行传输之外 与一般的通
  • ubuntu18.04使用jlnk下载程序

    ubuntu使用JLink下载程序 JLink安装 JLink官网下载最新的JLink驱动程序 ubuntu使用的是deb包 下载时选J Link Software and Documentation Pack下面的链接 使用sudo dp
  • 基于梯度下降的线性回归(Gradient Descent For Linear Regression)

    概述 梯度下降是很常用的算法 它不仅被用在线性回归上和线性回归模型 平方误差代价函数 在本次 我们要将梯度下降和代价函数结合 我们将用到此算法 并将其应用于具体的拟合直线的线性回归算法里 梯度下降算法和线性回归算法比较如图 左边梯度下降 右
  • Python 队列(Queue)用法

    一 队列 Queue Python的Queue模块中提供了同步的 线程安全的队列类 包括FIFO 先入先出 队列Queue LIFO 后入先出 队列LifoQueue 和优先级队列PriorityQueue 这些队列都实现了锁原语 能够在多
  • Win32程序之进程的原理

  • 面试题更新之-使用 base64 编码的优缺点

    文章目录 base64 编码是什么 使用 base64 编码的优缺点 base64 编码是什么 Base64编码是一种将二进制数据转换为ASCII字符的编码方式 它将三个字节的二进制数据分割成四组 每组6个比特 然后将这些6个比特转换为可打
  • IP有效性检查(C language)

    STATUS ip valid check const char v p Str int i int tmp char p NULL if strlen v p Str gt 15 return ERROR p char v p Str t
  • 基于Logistic回归和Sigmoid函数的分类【机器学习】

    一 认识Logistic回归 LR 分类器 首先 Logistic回归虽然名字里带 回归 但是它实际上是一种分类方法 主要用于两分类问题 利用Logistic函数 或称为Sigmoid函数 自变量取值范围为 INF INF 自变量的取值范围
  • poll方法01

    p select poll 功能 创建poll对象 返回值 poll对象 p register fd event 功能 注册关注的io事件 参数 fd 要关注的IO event 要关注的io事件类型 通用类型 POLLIN 读io事件 po
  • iphone邮箱看不到已发送_不看不知道 教你如何设置iPhone邮箱

    电子邮件是我们日常生活中必不可少的实用工具 尤其是在商务发面发挥着重要的作用 所以 这次我要教大家怎样设置与使用iPhone的电子邮箱功能 电子邮件是我们日常生活中必不可少的实用工具 尤其是在商务发面发挥着重要的作用 所以 这次我要教大家怎
  • Linux Cobbler自动部署装机

    Cobbler自动部署装机 一 实验准备 二 Cobbler自动装机服务搭建步骤 1 导入epel源 2 安装Cobbler以及其相关服务软件包 3 修改cobbler主配置文件 4 使用cobbler check 命令对Cobbler做检
  • ztree实现异步加载(点击节点,请求后台数据,添加数据到对应节点)真正实现了异步树加载数据

    ztree实现异步加载 首先说一下这篇文章和我写的上一篇异步树的区别 上一篇的我实现的是其实是个伪异步加载 因为我实际是把异步的操作写在了节点上面 点击节点时 获取当前节点的ID 取回子节点的数据 然后手动拼接到当前节点下面 真正的异步其实