`
wktong
  • 浏览: 54949 次
社区版块
存档分类
最新评论

Ztree异步数据库交互实例

阅读更多

首先提供Ztree官方网站http://www.ztree.me

Ztree是一个使用jQuery实现的JSP页面的各种功能树,本文介绍一个异步获取数据到下拉树的实现方式。

 

1、首先看数据库中的数据:

其中CLASSCODE,TRADECODE,CLASSLEVEL与Ztree的实现无关。

CLASSID:每个树节点自己的ID

CLASSNAME:顾名思义

TERMINATED:末端代号,用以判断是否为叶子节点(末节点)

PARENT:该节点的父节点ID

 

2、SQL:

工程使用的是oracle+ibatis,其查询语句如下。

(1)resultClass="hashmap"是指以hashmap类型返回查询结果

(2)isNotEmpty和isEmpty是ibatis的东西,顾名思义,满足哪个条件,就执行哪条语句。

【<span style="white-space: pre;">    </span>】下面这条语句莫名其妙多出来的,编辑不掉,当其不存在即可。

<select id="etpTradeZTree" resultClass="hashmap">
	select t.className as "name",
		  t.classId as "id" ,
		  t.parent as "pId",
		  t.terminated as "leaf"
	  from t_com_trade t
	where 1 = 1
	<isNotEmpty property="parent">
		and t.parent = #parent#
	</isNotEmpty>
	<isEmpty property="parent">
		and t.parent is null
	</isEmpty>
</select>

 

3、后台JAVA实现:

(1)ServiceImpl查出来的结果,放入一个List:

queryForList是ibatis提供的方法,获取数据库数据后,返回一个List类型的结果集。

public List ztreeEtpTrade(Long parent) {
	List list = treeDao.queryForList("common-selector.etpTradeZTree", "parent", parent);
	return list;
}

 

(2)在Action中,得到上面那个List,封装成Ztree需要的json格式后,再由action传到前台JSP。

每一次前台的点击,都会执行一次action获取数据,即实现了异步读取数据。

其中需要注意的是,我们调用SQL取数据的时候,需要给其一个参数parent,用以判断是否为父节点(根节点)。

$LongNull是封装在框架中的,其实就是request。

 

public void ztreeEtpTrade(){
	Long parent = $LongNull("id");//从前台传过来的,用来判断父节点
	if(parent!=null && parent == 0){
		parent = null;
	}
	List treeTrade = this.getCommonSelectorService().ztreeEtpTrade(parent);
	String json = JsonUtil.getJson(treeTrade);//变量json传给前台
	super.renderJson(json);
}

 

4、前台JSP:

<script/>标签内:可参考Ztree官方API查看各个属性的作用:http://www.ztree.me/v3/api.php

(1)下面的代码,都是按照Ztree官方实例的结构来写的,我也只是明白了90%左右,主要还是settingTrade里面的配置。

var treeTrade;
var settingTrade = {
	data: {
		simpleData: {
			enable : true,
			idKey : "id",
		 	pIdKey : "pId"
		}
	},
	async: {
		enable: true,
		url:"${base}/common/selector/ztreeEtpTrade.action",
		autoParam:["id"],
		dataFilter: filter
	},
	callback: {
		onClick: onClickTrade
	}
};
function Node(id, pId, name, isParent){
	this.id = id;  
	this.pId = pId;  
	this.name = name;
	this.isParent = isParent;
};
function filter(treeId, parentNode, childNodes) {
	var filterNodes = new Array()
	if (!childNodes) return null;
	var isParent;
	for (var i=0, l=childNodes.length; i<l; i++) {
		childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
		if(childNodes[i].leaf==0){
			isParent = true;
			filterNodes.push(new Node(childNodes[i].id, childNodes[i].pId, childNodes[i].name, isParent));
		}else{
			isParent = false;
			filterNodes.push(new Node(childNodes[i].id, childNodes[i].pId, childNodes[i].name, isParent));
		}
	}
	return filterNodes;
};
function onClickTrade(e, treeId, treeNode) {
	var zTree = $.fn.zTree.getZTreeObj("treeTrade"),
	nodes = zTree.getSelectedNodes(),
	tradeName = "";
	tradeId = "";
	nodes.sort(function compare(a,b){return a.id-b.id;});
	for (var i=0; i<nodes.length; i++) {
		tradeId += nodes[i].id + ",";
		tradeName += nodes[i].name + ",";
	}
	if (tradeId.length > 0 ) tradeId = tradeId.substring(0, tradeId.length-1);
	if (tradeName.length > 0 ) tradeName = tradeName.substring(0, tradeName.length-1);
	var tradeIdObj = $("#tradeId");
	var tradeNameObj = $("#tradeName");
	tradeIdObj.attr("value", tradeId);
	tradeNameObj.attr("value", tradeName);
};
function showMenuTrade() {
	var treeNodes = new Array();
	var tradeObj = $("#tradeName");
	var tradeOffset = $("#tradeName").offset();
	$("#tradeContent").css({
		left:0/*tradeOffset.left + "px"*/,
		top:/*tradeOffset.top + */tradeObj.outerHeight() + "px"}).slideDown("fast");
	$("body").bind("mousedown", onBodyDownTrade);
	$.ajax({
		url : "${base}/common/selector/ztreeEtpTrade.action",
		type : "post",
		async : true,
		dataType: "json",
		success : function(data){
			var isParent;
			$.each(data, function(i, item){
				if(item.leaf==0){
		            		isParent = true;
		            	}else{
		            	<input type="hidden" name="etp.tradeId" id="tradeId" readonly="readonly"/>
 isParent = false;
		            	};
		            	treeNodes.push(new Node(item.id, item.pId, item.name, isParent));
		            	$.fn.zTree.init($("#treeTrade"), settingTrade, treeNodes);
			});
                }
	});
};
function hideMenuTrade() {
	$("#tradeContent").fadeOut("fast");
	$("body").unbind("mousedown", onBodyDownTrade);
};
function onBodyDownTrade(event) {
	if (!(event.target.id == "menuBtn" || event.target.id == "tradeContent" || $(event.target).parents("#tradeContent").length>0)) {
		hideMenuTrade();
	}
};

 

 JSP的HTML:

 

<input type="text" name="etp.tradeName" id="tradeName" readonly="readonly"/>
<div class="zTreeDemoBackground left">
	<ul class="list">
		<li id="tradeContent" class="menuContent" style="position:absolute;left:0;top:-10px;z-index:800;background:#fff;border-left:1px solid #aaa;border-right:1px solid #aaa;border-bottom:1px solid #aaa;display:none;">
			<ul id="treeTrade" class="ztree" style="width:164px;"></ul>
 		</li>
	</ul>
</div>
<input type="button" name="tradeBtn" value="选&nbsp;&nbsp;择" id="tradeBtn" onclick="showMenuTrade(); return false;"/>
 

5、操作示例

(1)点击“选择”按钮,效果图如下:


 后台action的过程:

会给parent传一个null值,执行SQL取数据,当传到action,数据如下(参照action代码)。

treeTrade的值:[{id=1, pId=null, name=生产企业, leaf=0}, {id=2, pId=null, name=流通企业, leaf=0}]

json的值:[{"id":1,"pId":null,"name":"生产企业","leaf":0},{"id":2,"pId":null,"name":"流通企业","leaf":0}]

 

(2)点击“生产企业”旁的加号,加载其孩子。

后台action的过程:

此次给parent传的值是1(“生产企业”的CLASSID)。

treeTrade的值:[{id=3, pId=1, name=药品生产企业, leaf=1}, {id=7, pId=1, name=保健品生产企业, leaf=1}]

json的值:[{"id":3,"pId":1,"name":"药品生产企业","leaf":1},{"id":7,"pId":1,"name":"保健品生产企业","leaf":1}]

 

所有代码都在上面了,不可能每行代码都解析清楚,我也是新人,多多指导交流。

1、先明白数据库的数据结构。

2、要想自己掌握的话,还是要靠自己一行一行代码去Google、百度,API。

3、除了Iteye,ztree在百度贴吧也有阵营,也可以去瞧瞧。http://tieba.baidu.com/f?kw=ztree

4、推荐一篇文章:这些年我们爱犯的弱智错误(菜鸟必看)

  • 大小: 33.6 KB
  • 大小: 5.4 KB
  • 大小: 7.8 KB
分享到:
评论
4 楼 wktong 2012-12-20  
liminshaoye 写道
我想知道你的那个Long parent = $LongNull("id");//从前台传过来的,用来判断父节点  那个id是怎样传过来的!????????????????????????????????????????

这个是我的开发框架内的功能,可以简化操作。
这行代码类似于get/set方法。

假设前台的form里面有一个input的name为“str”,
在action里面可以这样写:
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
这样当formsubmit之后,前台的str就可以传到action的str里面了。
3 楼 liminshaoye 2012-12-19  
我想知道你的那个Long parent = $LongNull("id");//从前台传过来的,用来判断父节点  那个id是怎样传过来的!????????????????????????????????????????
2 楼 wktong 2012-09-26  
是用的3.2.
1 楼 ly24860865 2012-09-18  
请问你是采用zTree3.4开发的吗?

相关推荐

    ztree连接数据库的一些增删该查

    【zTree连接数据库的增删改查】 zTree是一个基于jQuery的开源树形插件,以其高效的性能、灵活的配置和丰富的功能而受到广大开发者欢迎。它特别适用于处理树状菜单、树状数据的Web显示以及权限管理等场景。zTree采用...

    zTree异步加载简单示例VS2008项目完整源码

    通过对这些源码的学习,开发者可以掌握如何结合后台数据和前端交互,实现zTree异步加载的完整流程,从而在自己的项目中灵活运用这一技术。同时,这也为初学者提供了一个很好的学习实例,有助于理解异步加载在实际...

    jquery zTree异步加载简单实例分享

    知识点四:zTree异步加载的关键配置项 1. enable属性:设置为true以启用异步加载功能。 2. url属性:指定服务器端servlet的路径,用于获取异步加载的数据。 3. autoParam属性:自动传递给服务器的参数名称列表,这里...

    zTree异步加载Demo

    【zTree异步加载Demo】是一个基于SpringMVC框架和MySQL数据库实现的示例,它展示了如何使用zTree这一流行的JavaScript树形插件进行异步数据加载。zTree是一款功能强大的jQuery插件,广泛用于构建多级目录结构,如...

    asp.net mvc4 ztree 连接数据库 动态生成菜单简单demo

    总结,这个"asp.net mvc4 ztree 连接数据库 动态生成菜单简单demo"是一个综合运用了ASP.NET MVC4的MVC模式、数据库操作、前端库集成以及动态数据呈现的实例。它展示了如何在Web应用中创建动态菜单,提供了一种有效的...

    jquery zTree异步加载简单实例讲解

    总的来说,jQuery zTree的异步加载功能结合了服务器端的强大处理能力与前端的交互体验,为开发者提供了一种有效管理大规模数据的解决方案。通过正确配置Servlet和zTree的设置,以及适当的数据过滤和处理,我们可以...

    jquery zTree异步加载、模糊搜索简单实例分享

    zTree是一款广泛使用的JavaScript树形控件,它能够帮助开发者构建动态、交互性强的树结构界面。以下是对这两个功能的详细解释: 一、节点模糊搜索功能: zTree提供了强大的节点模糊搜索功能,允许用户在树形结构中...

    jQuery zTree 异步加载添加子节点重复问题

    在解决jQuery zTree异步加载添加子节点时出现的重复问题之前,我们首先需要理解zTree树插件的基本特性和其工作原理。zTree是一个基于jQuery的树形控件,它支持多功能的树形结构展示,并且可以轻松实现节点的增删改查...

    ztree树形控件实例

    《zTree树形控件实例解析与应用》 在网页开发中,树形控件是一种常见且实用的用户界面元素,它能够清晰地展示层级关系数据,如文件系统、组织结构等。zTree是一款基于JavaScript的开源树形控件,它结合了ajax和json...

    zTree 3.0 实例下载

    **zTree 3.0 实例详解** zTree是一款基于JavaScript的树形插件,广泛应用于网页中的数据展示,如文件目录、组织架构等场景。zTree 3.0是其一个重要的版本,提供了丰富的功能和高度的自定义性。在实际开发中,拥有...

    ZTREE.net实例

    本实例展示了如何在.NET应用中动态加载数据,并将其呈现为ZTREE的节点,从而提升用户界面的交互性和可操作性。让我们深入探讨这个过程。 首先,ZTREE的核心在于其JSON数据格式。在.NET应用中,我们需要创建一个...

    zTreeAPI、实例及样式

    **zTree API、实例及样式详解** zTree是一款基于JavaScript的树形插件,它具有丰富的API接口和灵活的配置选项,广泛应用于网页中的数据展示、菜单导航、组织结构图等场景。本篇将深入探讨zTree的核心特性、API用法...

    ztree小例子

    【zTree小例子详解】 在IT领域,zTree是一款基于jQuery的树形插件,它以其灵活、可扩展性及丰富的API而广受欢迎。...在实际项目中,结合服务器端数据动态加载和异步处理,zTree能进一步提升应用的交互性和效率。

    zTree的一个简单的demo,包括如何异步获取数据

    它支持多种操作,如展开/折叠节点、选择节点、异步加载数据等,使得在网页上实现交互式的树形结构变得简单。 【异步获取数据】 在实际应用中,往往需要从服务器动态获取并展示树形结构的数据,这就涉及到了zTree的...

    JQuery zTree源码以及示例

    **jQuery zTree** 是一个基于jQuery的开源树形插件,它被广泛应用于网页中构建交互式的树形结构。这个插件提供了丰富的功能,如节点的增删改查、节点的展开与折叠、多选模式、异步加载数据等。在本资料中,我们包含...

    JQuery zTree asp.net实例

    **jQuery zTree ASP.NET 实例详解** 在Web开发中,我们常常需要展示层次结构的数据,例如组织架构、文件目录等,这时Tree控件就显得尤为重要。`jQuery zTree`是一款非常流行的JavaScript Tree插件,它提供了丰富的...

    SSH 做的ztree实例

    Ztree以其良好的交互性和灵活性深受开发者喜爱,它可以轻松实现节点的增删改查、异步加载、多选等功能。 Ztree API是ztree的核心,包含了创建、操作和定制树形结构的各种方法和配置选项。例如,`setting`对象用于...

    ztree+java动态树加载实例

    在这个“ztree+java动态树加载实例”中,我们将深入探讨如何结合Java后端与ZTree前端库来创建一个动态的树形数据加载示例。 ZTree的核心功能是将复杂的数据结构转化为易于理解的树状视图。它支持多种交互方式,如...

    一个zTree实例

    总结来说,这个"一个zTree实例"涵盖了前端交互设计、后端服务开发、数据库操作以及数据展示等多个方面,展示了如何在SSH环境中集成zTree实现动态数据管理,同时利用MySQL数据库存储和展示数据,为用户提供直观的操作...

Global site tag (gtag.js) - Google Analytics