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

  zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点。想要了解更多可到ztree网站 http://www.treejs.cn/v3/main.php#_zTreeInfo,今天只说一下异步加载。

  ztree需要引入三个包

<link rel="stylesheet" href="css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="js/jquery.ztree.core.js"></script>

  你可以去官网下载,然后引入,(!!!记得修改路径)

  用异步加载必须设置setting.async 中的各个属性,因为我们要联系数据库,所以得有一个Servlet层,当然还需要一个树的对象,连接数据库的DBUtil层,以及对数据库进行操作的Dao层

  思路:通过id和pid将父节点和子节点联系起来,父id是子的pid,所以,可以通过父id,来查询所以的pid是否等于id来进行查找他的子,所以数据库就可以设置成id name pid。

  

首先通过页面向Servlet传来id(第一次传来的id是空,因为第一个没有父亲,所以传来的是空,但是我们得将他转换为0),然后通过父id来查找子节点。关键一步,因为子节点也可能是父节点,所以需要判断它是否为父亲节点,如果不是则isParent为false,(isParent在数对象里我把它默认成true);具体看代码

对象层

package Bin;

public class Tree {
private int id;
private String name;
private int pid; // 父id
private boolean IsParent = true; // 是否为父节点
private String url; //跳转路径
private String target; //设置点击节点后在何处打开 url
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public boolean getIsParent() {
return IsParent;
}
public void setIsParent(boolean isParent) {
IsParent = isParent;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
} }

Dao层

package Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.junit.Test; import Bin.Tree;
import Bin.Volunteer;
import DBUtil.Util;
public class Dao {
/*
* 查询
*/
@Test
public static List<Tree> query(int pid){
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Tree> list = new ArrayList<>();;
try {
// 获取连接
con = Util.getConnection();
// 编写sql语句
String sql = "select * from City where pid = ?";
// 执行sql语句
ps = con.prepareStatement(sql);
// 设置参数
ps.setInt(1, pid);
// 执行查询操作
rs = ps.executeQuery();
while(rs.next()) {
Tree city = new Tree();
city.setId(rs.getInt(1));
city.setName(rs.getString(2));
city.setPid(rs.getInt(3));
list.add(city);
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(rs!=null) {
rs.close();
}
Util.release(con, ps);
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
// 查询某个节点是否有子节点
public static int search(int id){
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
int n = 0;
try {
// 获取连接
con = Util.getConnection();
// 编写sql语句
String sql = "select * from City where pid = ?";
// 执行sql语句
ps = con.prepareStatement(sql);
//设置参数
ps.setInt(1, id);
// 执行查询操作
rs = ps.executeQuery();
while(rs.next()) {
n++;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(rs!=null) {
rs.close();
}
Util.release(con, ps);
} catch (SQLException e) {
e.printStackTrace();
}
return n;
}
}

DBUtil层:连接数据库和释放资源

package DBUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class Util {
// 获取连接
// 获取连接方法
public static Connection getConnection() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/tree?useSSL=false&useUnicode=true&characterEncoding=utf8";
String username = "root";
String password = "a3685371";
Connection con = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url,username,password);
}catch(Exception e) {
throw new RuntimeException(e);
}
return con;
}
// 释放资源 public static void release(Connection con,PreparedStatement ps) {
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

Servlet层:

package Servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List; 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 Bin.Tree;
import Dao.Dao;
import net.sf.json.JSONArray; /**
* Servlet implementation class Servlet
*/
@WebServlet("/Servlet")
public class Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Dao dao = new Dao();
/**
* @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
String pid = request.getParameter("id");
if(pid==null||pid.equals("")) {
pid = 0+"";
}
List<Tree> list = Dao.query(Integer.parseInt(pid));
for(int i=0;i<list.size();i++) {
Tree tree = list.get(i);
int n = Dao.search(tree.getId());
if(n>=1) {
tree.setIsParent(true);
tree.setUrl("fenzhi.jsp");
tree.setTarget("tree");
}else {
tree.setIsParent(false);
tree.setUrl("yezi.jsp");
tree.setTarget("tree");
}
}
// 将list对象转换为json
JSONArray json = JSONArray.fromObject(list);
// 将json对象转换为字符串
String JSON = json.toString();
// 将JSON相应给客户端
PrintWriter pt = response.getWriter();
pt.println(JSON);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
} }

页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD> <TITLE> ZTREE DEMO - Standard Data </TITLE>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="js/jquery.ztree.core.js"></script>
<!-- <script type="text/javascript" src="../../../js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit.js"></script>-->
<script type="text/javascript">
var setting = {
async: {
enable: true, // 设置Ztree是否开启异步加载模式
url: "Servlet", // 请求路径
autoParam:["id"] // 异步加载时需要自动提交父节点属性的参数
}
};
// 自动加载树
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting);
});
</script>
</HEAD>
<BODY style="background-color:#ff8888">
<div class="zTreeDemoBackground left">
<ul id="treeDemo" class="ztree"></ul>
</div> </BODY>
</HTML>

运行结果:

当点击叶子节点时,跳转页面: 

当点击父节点时,跳转页面: 

总结:树刚开始接触,不是很了解,还需多加练习。

如果有大佬发现错误或者有更简便的方法,请留言,感激不尽!!向您学习!!!!

ztree异步加载---------补发周日内容的更多相关文章

  1. zTree 异步加载

    zTree异步加载数据的简单实现,更为详细的Api请参考 zTree官网   http://www.treejs.cn/ <link href="~/Content/ztree/css ...

  2. ztree异步加载

    Ztree异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 直接贴代码(SpringMvc+Mybatis): 前台页面ztreeList.jsp: ...

  3. jquery zTree异步加载的例子

    下面是使用zTree异步加载的一个例子: 1)初始化树的时候是ajax请求,返回nodes列表来初始化树的:如果一开始就异步的话,$.fn.zTree.init($("#zTree" ...

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

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

  5. JQuery ztree 异步加载实践

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

  6. 关于ztree异步加载的问题(二)

    本来以为这个异步加载会很难控制,因为考虑到ztree节点图标的控制,结果并不是那么困难,ztree自己控制图标,你只要在json中设置isParent:true,它自己会识别父节点并控制图标,以下是核 ...

  7. zTree异步加载并初始化树时全部展开(贴主要代码)

    <%@page pageEncoding="UTF-8"%> <%@include file="/commons/include/html_doctyp ...

  8. Jquery树控件ZTree异步加载

    异步加载的意思就是: 当点击展开树节点时,才去请求后台action返回点击节点的子节点数据并加载. 这里面主要设计ztree的setting变量的async属性设置: var setting = { ...

  9. 插件使用一树形插件---zTree一zTree异步加载

    zTree 可以实现异步加载.异步加载可以让初次加载速度快,带来好的用户体验. 异步加载 官方源码中的demo提示了例子.例子是采用php语言. 在java语言中,zTree如何与Servlet结合呢 ...

随机推荐

  1. day48——css样式

    day48 通过调试窗口还可以玩一个神奇的东西 document.body.contentEditable=true css样式 高度宽度 width宽度 height高度 块级标签能设置高度宽度,内 ...

  2. 浅谈有趣的 //go: 指令

    前言 如果你平时有翻看源码的习惯,你肯定会发现.咦,怎么有的方法上面总是写着 //go: 这类指令呢.他们到底是干嘛用的? 今天我们一同揭开他们的面纱,我将简单给你介绍一下,它们都负责些什么 go:l ...

  3. sqlserver安装教程

    1 安装步骤:http://jingyan.baidu.com/article/359911f573f71657fe030603.html 2 当提示装载第二张光盘时,在DAEMON Tools中把第 ...

  4. 使用poi统计工作职责

    1 创建一个新的sheet工作页 Sheet job = workbook.createSheet("工作职责统计"); 2 查询工作职责问题选项列表,并设置第一行倒出时间 Lis ...

  5. 反射之关于MethodInfo的使用

    1.MethodInfo类是在System.Reflection命名空间底下,既然是在Reflection空间底下.故名思议关于反射相关的操作,其中比较重要的方法是Invoke()方法,它是加载相同程 ...

  6. maven引入外部包的方法1

    最近一个项目需要用到两个外部包文件 ctgclient-8.1.0.3.jar ctgserver-8.1.0.3.jar 方便maven打包,修改pom.xml配置(basedir为pom.xml所 ...

  7. InputStream和OutputStream及相关知识汇总

    https://www.jianshu.com/p/e5bc7ea5f948 最近帮学姐写爬虫的时候遇到奇怪的问题,同样的程序在Mac上可以正常运行而在Windows上返回结果错误,最后经排查发现是L ...

  8. 【开发笔记】- QQ消息轰炸

    1.右键新建一个文本文件: 2.打开记事本将如下代码复制过去: On Error Resume Next Dim wsh,ye set wsh=createobject("wscript.s ...

  9. 类选择器与ID选择器的比较

    如果已经在元素中标识了class或id,就可以在选择器中使用这个标准,从而只对已标识的元素进行格式化.不过推荐使用类选择器,一会儿我会解释理由. 要在class选择器和id选择器之间作出选择的时候,建 ...

  10. tomcat 安装记录 centos7 开放对外端口

    //端口查询 [root@CentOS7 bin]# firewall-cmd --query-port=9090/tcp no //添加端口 [root@CentOS7 bin]# firewall ...