链接 提供源代码为demo,未整理 ,但测试可用
step1:html页面
<!DOCTYPE html>
<HTML>
<HEAD>
<TITLE> ZTREE DEMO - Async</TITLE>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="./JQuery zTree v3.5.14/css/demo.css" type="text/css">
<link rel="stylesheet" href="./JQuery zTree v3.5.14/css/zTreeStyle/zTreeStyle.css" type="text/css">
<script type="text/javascript" src="./JQuery zTree v3.5.14/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="./JQuery zTree v3.5.14/js/jquery.ztree.core-3.5.js"></script>
<!-- <script type="text/javascript" src="../../../js/jquery.ztree.excheck-3.5.js"></script>
<script type="text/javascript" src="../../../js/jquery.ztree.exedit-3.5.js"></script>-->
<SCRIPT type="text/javascript">
// private String id;//1
// private String nodeId;//2
// private String parentId;//3
// private String hrefAddress;//4
// private String nodeName;//5
//{"hrefAddress":"test.jsp","nodeId":"1","nodeName":"A","parentId":"-1"}
var setting = {
data: {
simpleData: {
enable: true,
idKey: "nodeId",
pIdKey: "parentId",
rootPId: -1,
}
},
async: {
enable: true,
// url:"../asyncData/getNodes.php",
url:"ZTreeSerlvet",
autoParam:["nodeId", "nodeName", "parentId"],
otherParam:{"otherParam":"zTreeAsyncTest"},
dataFilter: filter
},
callback: {
beforeClick: beforeClick,
onClick: onClick
}
};
function filter(treeId, parentNode, childNodes) {
// alert('TREEID-->'+treeId);
// alert('PARENTNODE-->'+parentNode);
// alert('CHILDNODES-->'+childNodes);
if (!childNodes) return null;
for (var i=0, l=childNodes.length; i<l; i++) {
// alert(childNodes[i].nodeName);
childNodes[i].name = childNodes[i].nodeName.replace(/\.n/g, '.');
}
return childNodes;
}
function beforeClick(treeId, treeNode, clickFlag) {
// alert(treeId);
// alert(treeNode);
// alert(clickFlag);
}
function onClick(event, treeId, treeNode, clickFlag) {
// alert(treeId);
alert(treeNode.parentId);
alert(treeNode.isParent);
// alert(clickFlag);
}
$(document).ready(function(){
$.fn.zTree.init($("#treeDemo"), setting,null);
});
function getTime() {
var now= new Date(),
h=now.getHours(),
m=now.getMinutes(),
s=now.getSeconds();
return (h+":"+m+":"+s);
}
function test(){
alert("test");
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<h1>异步加载节点数据的树</h1>
<h6>[ 文件路径: core/async.html ]</h6>
<div class="content_wrap">
<div class="zTreeDemoBackground left">
<ul id="treeDemo" class="ztree"></ul>
</div>
<div class="right">
<ul class="info">
<li class="title"><h2>1、setting 配置信息说明</h2>
<ul class="list">
<li class="highlight_red">使用异步加载,必须设置 setting.async 中的各个属性,详细请参见 API 文档中的相关内容</li>
</ul>
</li>
<li class="title"><h2>2、treeNode 节点数据说明</h2>
<ul class="list">
<li>异步加载功能对于 treeNode 节点数据没有特别要求,如果采用简单 JSON 数据,请设置 setting.data.simple 中的属性</li>
<li>如果异步加载每次都只返回单层的节点数据,那么可以不设置简单 JSON 数据模式</li>
</ul>
</li>
<li class="title"><h2>3、其他说明</h2>
<ul class="list">
<li class="highlight_red">观察 autoParam 和 otherParam 请使用 firebug 或 浏览器的开发人员工具</li>
<li class="highlight_red">此 Demo 只能加载到第 4 级节点(level=3)</li>
<li class="highlight_red">此 Demo 利用 dataFilter 对节点的 name 进行了修改</li>
</ul>
</li>
</ul>
</div>
</div>
</BODY>
</HTML>
step2:web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>ZTreeSerlvet</servlet-name>
<servlet-class>com.handler.ZTreeSerlvet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ZTreeSerlvet</servlet-name>
<url-pattern>/ZTreeSerlvet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
step3:java servlet类
package com.handler;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.SystemUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.bean.ZtreeBean;
import com.dao.DaoTest;
import com.dao.Nodes;
public class ZTreeSerlvet extends HttpServlet {
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// System.out.println("id="+request.getParameter("id") + "\n " + "name="+request.getParameter("name") + " \n " + "otherParam="+request.getParameter("otherParam")+"\n"+"pid="+request.getParameter("pid"));
response.setCharacterEncoding("UTF-8");
PrintWriter printWriter = response.getWriter();
String pid = request.getParameter("parentId");
String nodeName = request.getParameter("nodeName");
String nodeId = request.getParameter("nodeId");
System.out.println("pid-->"+pid);
System.out.println("nodeName-->"+nodeName);
System.out.println("nodeId-->"+nodeId);
JSONArray _JSONArray_ = daoForSelectByParametersFromSQLibe(null,nodeId,null);
System.out.println("talkAbout-->"+_JSONArray_);
/**
* var zTreeNodes = [
{"id":1, "name":"test1", "nodes":[
{"id":11, "name":"test11", "nodes":[
{"id":111, "name":"test111"}
]},
{"id":12, "name":"test12"}
]},
];
*/
if(Math.random() == 100023404){
JSONArray _JSONArray = new JSONArray();
// public ZtreeBean(int 1id,int 2pId, String 3name,boolean 4open,boolean isParent){
ZtreeBean zb = new ZtreeBean(0, -1, "NodeName", false,true);
ZtreeBean zb1 = new ZtreeBean(1, 0, "NodeName2", false,true);
ZtreeBean zb2 = new ZtreeBean(2, 1, "NodeName3", false,true);
ZtreeBean zb3 = new ZtreeBean(3, 2, "NodeName4", false,false);
List<ZtreeBean> list = new ArrayList<ZtreeBean>();
// list.add(zb);
// list.add(zb1);
// list.add(zb2);
// list.add(zb3);
String str = JSON.toJSONString(list);
_JSONArray.add(zb);
// _JSONArray.add(zb1);
// _JSONArray.add(zb2);
// _JSONArray.add(zb3);
String jsonStrForJS = "";
jsonStrForJS = _JSONArray.toJSONString();
}
// System.out.println("jsonStrForJS-->"+_JSONArray_);
printWriter.print(_JSONArray_.toString());
}
public JSONArray daoForSelectByParametersFromSQLibe(String id ,String pid,String name){
//得到数据库连接
DaoTest test = new DaoTest();
ArrayList<Nodes> list= test.getNodeInfoForZTreeByParentId(pid);
JSONArray _JSONArray = (JSONArray) JSONArray.toJSON(list);
return _JSONArray;
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
public void init() throws ServletException {
}
}
package com.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class DaoTest {
Connection con = null;
public Connection getConnection() {
Connection conn = null;
String url = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=gbk";
String user = "root";
String password = "mytopicforever";
try {
if (conn == null) {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, user, password);
}
} catch (Exception e) {
System.out.println("连接失败");
return null;
} finally {
url = null;
user = null;
password = null;
}
return conn;
}
public Connection getConnectionBySQLibe(){
Connection conn = null;
Statement stmt = null;
ResultSet rset = null;
System.out.println(new java.util.Date());
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection( "jdbc:sqlite:/d:/test.db");
// conn.setAutoCommit(false);
// stmt = conn.createStatement();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
public ArrayList<Nodes> getNodeInfo() {
String sql = "select nodeId ,parentId ,hrefAddress ,nodeName from tree_table order by id ";
PreparedStatement pre = null;
Connection conn = null;
//conn = getConnection();
conn = getConnectionBySQLibe();
ResultSet rs = null;
ArrayList<Nodes> list = new ArrayList<Nodes>();
try {
pre = conn.prepareStatement(sql);
rs =pre.executeQuery();
while (rs.next()){
Nodes node = new Nodes();
node.setHrefAddress(rs.getString("hrefAddress"));
node.setNodeId(rs.getString("nodeId"));
node.setParentId(rs.getString("parentId"));
node.setNodeName(rs.getString("nodeName"));
list.add(node);
}
rs.close();
pre.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
pre = null;
conn = null;
rs = null;
}
return list;
}
public ArrayList<Nodes> getNodeInfoForZTreeByParentId(String parentId) {
String pid = "";
if(null == parentId || parentId.equals("")){
pid = "-1";
}else{
pid = parentId;
}
//测试 根节点 父节点 pid = '-1'
String sql = "select (select count(*) from tree_table tt where tt.parentId = t.nodeId )as count ,nodeId ,parentId ,hrefAddress ,nodeName from tree_table t where t.parentId = '"+pid+"' order by id";
PreparedStatement pre = null;
Connection conn = null;
//conn = getConnection();
conn = getConnectionBySQLibe();
ResultSet rs = null;
ArrayList<Nodes> list = new ArrayList<Nodes>();
try {
pre = conn.prepareStatement(sql);
rs =pre.executeQuery();
while (rs.next()){
Nodes node = new Nodes();
node.setHrefAddress(rs.getString("hrefAddress"));
node.setNodeId(rs.getString("nodeId"));
node.setParentId(rs.getString("parentId"));
node.setNodeName(rs.getString("nodeName"));
node.setOpen(false);
String count = rs.getString("count");
boolean isParent = true;
if(Integer.parseInt(count)<=0){
isParent = false;
System.out.println("--"+rs.getString("nodeName"));
}
node.setIsParent(isParent);
node.setTarget("www.sina.com.cn");
list.add(node);
}
rs.close();
pre.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
pre = null;
conn = null;
rs = null;
}
return list;
}
public ArrayList<Nodes> getNodeInfoByParentId(String parentId) {
//select nodeId ,parentId ,hrefAddress ,nodeName from tree_table t where t.parentId='1' order by id
String sql = "select nodeId ,parentId ,hrefAddress ,nodeName from tree_table t where t.parentId='"+parentId+"' order by id";
PreparedStatement pre = null;
Connection conn = null;
//conn = getConnection();
conn = getConnectionBySQLibe();
ResultSet rs = null;
ArrayList<Nodes> list = new ArrayList<Nodes>();
try {
pre = conn.prepareStatement(sql);
rs =pre.executeQuery();
while (rs.next()){
Nodes node = new Nodes();
node.setHrefAddress(rs.getString("hrefAddress"));
node.setNodeId(rs.getString("nodeId"));
node.setParentId(rs.getString("parentId"));
node.setNodeName(rs.getString("nodeName"));
list.add(node);
}
rs.close();
pre.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
pre = null;
conn = null;
rs = null;
}
return list;
}
}
数据库 sqlite
sql脚本 sqlibedb.sql
/****************/
/* */
/* sqlibedb.SQL */
/* */
/****************/
/* Disable Foreign Keys */
pragma foreign_keys = off;
/* Begin Transaction */
begin transaction;
/* Database [test] */
pragma auto_vacuum=0;
pragma encoding='UTF-8';
pragma page_size=1024;
/* Drop table [main].[tree_table] */
drop table if exists [main].[tree_table];
/* Table structure [main].[tree_table] */
CREATE TABLE [main].[tree_table] (
[id] VARCHAR(256),
[nodeId] VARCHAR(256),
[hrefAddress] VARCHAR(256),
[nodeName] VARCHAR(256),
[parentId] VARCHAR(256),
CONSTRAINT [sqlite_autoindex_tree_table_1] PRIMARY KEY ([id]));
/* Data [main].[tree_table] */
insert into [main].[tree_table] values('1', '1', 'test.jsp', 'A', '-1');
insert into [main].[tree_table] values('2', '11', 'test.jsp', 'B', '1');
insert into [main].[tree_table] values('3', '110', 'test.jsp', 'C', '11');
insert into [main].[tree_table] values('4', '111', 'test.jsp', 'D', '11');
insert into [main].[tree_table] values('5', '112', 'test.jsp', 'E', '11');
insert into [main].[tree_table] values('6', '113', 'test.jsp', 'F', '11');
insert into [main].[tree_table] values('7', '114', 'test.jsp', 'G', '11');
insert into [main].[tree_table] values('8', '115', 'test.jsp', 'H', '11');
insert into [main].[tree_table] values('9', '116', 'test.jsp', 'J', '11');
insert into [main].[tree_table] values('10', '117', 'test.jsp', 'K', '11');
insert into [main].[tree_table] values('11', '118', 'test.jsp', 'L', '11');
insert into [main].[tree_table] values('12', '119', 'test.jsp', 'M', '11');
insert into [main].[tree_table] values('13', '120', 'test.jsp', 'N', '11');
insert into [main].[tree_table] values('14', '121', 'test.jsp', 'O', '11');
insert into [main].[tree_table] values('15', '122', 'test.jsp', 'P', '11');
insert into [main].[tree_table] values('16', '123', 'test.jsp', 'Q', '11');
insert into [main].[tree_table] values('17', '124', 'test.jsp', 'R', '11');
insert into [main].[tree_table] values('18', '125', 'test.jsp', 'S', '11');
insert into [main].[tree_table] values('19', '126', 'test.jsp', 'T', '11');
insert into [main].[tree_table] values('20', '127', 'test.jsp', 'U', '11');
insert into [main].[tree_table] values('21', '12', 'test.jsp', 'V', '1');
insert into [main].[tree_table] values('22', '121', 'test.jsp', 'W', '12');
insert into [main].[tree_table] values('23', '122', 'test.jsp', 'X', '12');
insert into [main].[tree_table] values('24', '123', 'test.jsp', 'Y', '12');
insert into [main].[tree_table] values('25', '124', 'test.jsp', 'Z', '12');
insert into [main].[tree_table] values('26', '125', 'test.jsp', 'AA', '12');
insert into [main].[tree_table] values('27', '13', 'test.jsp', 'BB', '1');
insert into [main].[tree_table] values('28', '131', 'test.jsp', 'CC', '13');
insert into [main].[tree_table] values('29', '132', 'test.jsp', 'DD', '13');
insert into [main].[tree_table] values('30', '133', 'test.jsp', 'EE', '13');
insert into [main].[tree_table] values('31', '134', 'test.jsp', 'FF', '13');
insert into [main].[tree_table] values('32', '14', 'test.jsp', 'HH', '1');
insert into [main].[tree_table] values('33', '141', 'test.jsp', 'II', '14');
insert into [main].[tree_table] values('34', '142', 'test.jsp', 'JJ', '14');
insert into [main].[tree_table] values('35', '143', 'test.jsp', 'KK', '14');
insert into [main].[tree_table] values('36', '144', 'test.jsp', 'LL', '14');
insert into [main].[tree_table] values('9999', '9999', 'www.sina.com.cn', 'json', '116');
/* Commit Transaction */
commit transaction;
/* Enable Foreign Keys */
pragma foreign_keys = on;
工具下载地址:
SQLite Expert Professional 3 破解版
http://pan.baidu.com/share/link?shareid=888477095&uk=4181630758
项目源码下载地址:
http://pan.baidu.com/share/link?shareid=899380643&uk=4181630758
数据库文件下载地址:test.db
http://pan.baidu.com/share/link?shareid=963298470&uk=4181630758