ext动态树 java_基于Ext异步加载tree的实例 - Seraph115 - JavaEye技术网站
使
用JS生成树形结构的菜单是基于J2EE的B/S系统常用的UI方式。但长期以来的问题是同步(即一次加载整棵树)加载一棵完整的树给前台及后台同时带来
压力,由于加载数据及渲染时间过长使用户体验度很低。Ajax的异步数据传输方式是解决此问题的较好方式,即每次只加载一层节点,当需要时才加载下级节
点,这样页面无需一次加载解决了此问题。
Ext的TreePanel组件提供了此功能即异步树(asynchronism tree),使用其实现需以下两步:
后台数据加载的实现,并以JSON形式提供给前台。
前台Ext的Tree组件实现。
实现预览:
1. 首先是JavaBean的节点模型(Tree Node Model):
Java代码
/**
* Method: 异步加载树型结点
* Origin Time: 2008-8-15 下午03:56:28
*
* @author Seraph
* @email: seraph115@gmail.com
*/
publicclassAsyncTreeNode {
privateString id;
privateString text;// 结点显示名称
privatebooleanleaf;// 是否为叶子结点
privatebooleandisabled;// 是否可用
privateString cls;// 显示的样式,file、folder
privateString iconCls;// 结点图标样式
privateString href;// 点击后时的链接
privateString hrefTarget;// 在何frame中显示
privatebooleandraggable;// 是否可拖拽
// Omit the get and set method
... ...
}
/**
* Method: 异步加载树型结点
* Origin Time: 2008-8-15 下午03:56:28
*
* @author Seraph
* @email: seraph115@gmail.com
*/
public class AsyncTreeNode {
private String id;
private String text; // 结点显示名称
private boolean leaf; // 是否为叶子结点
private boolean disabled; // 是否可用
private String cls; // 显示的样式,file、folder
private String iconCls; // 结点图标样式
private String href; // 点击后时的链接
private String hrefTarget; // 在何frame中显示
private boolean draggable; // 是否可拖拽
// Omit the get and set method
... ...
}
数据库中的表结构:
COLUMN_NAME
DATA_TYPE
ID
NUMBER
PARENT
NUMBER
TEXT
VARCHAR2
LEAF
VARCHAR2
DISABLED
VARCHAR2
CLS
VARCHAR2
ICON_CLS
VARCHAR2
HREF
VARCHAR2
HREF_TARGET
VARCHAR2
取下级节点的接口定义:
Java代码
/**
* Method: 获取异步加载树型子结点
* Author: Seraph
* Origin Time: 2008-9-9 下午05:46:02
*
* @param menuId 当前结点的id
* @return 下级节点组成的List
*/
publicList getLowerTreeNodes(String menuId);
/**
* Method: 获取异步加载树型子结点
* Author: Seraph
* Origin Time: 2008-9-9 下午05:46:02
*
* @param menuId 当前结点的id
* @return 下级节点组成的List
*/
public List getLowerTreeNodes(String menuId);
数据提供的Spring的Controller:
Java代码
/**
* Method:
* Origin Time: 2008-8-15 上午11:07:55
* @author Seraph
* @email: seraph115@gmail.com
*/
publicclassAsyncTreeProviderControllerextendsJsonProviderController {
privateTreeManager treeManager;
publicvoidsetTreeManager(TreeManager treeManager) {
this.treeManager = treeManager;
}
protectedModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throwsException {
String rootId = request.getParameter("id");
List list = treeManager.getLowerTreeNodes(rootId);
super.pushJsonResponse(response, list);
returnnull;
}
}
/**
* Method:
* Origin Time: 2008-8-15 上午11:07:55
* @author Seraph
* @email: seraph115@gmail.com
*/
public class AsyncTreeProviderController extends JsonProviderController {
private TreeManager treeManager;
public void setTreeManager(TreeManager treeManager) {
this.treeManager = treeManager;
}
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String rootId = request.getParameter("id");
List list = treeManager.getLowerTreeNodes(rootId);
super.pushJsonResponse(response, list);
return null;
}
}
此步将查询到的下级结点的List转换为JSON数据通过Ajax方式返回给Ext的TreePanel组件用以渲染下级结点。
PS: 推荐使用json-lib来转换javabean为json数据。下面是json-lib的maven的dependency。
Xml代码
net.sf.json-lib
json-lib
2.2.2
net.sf.json-lib
json-lib
2.2.2
2. JavaScript的Ext TreePanel组件实现:
Js代码
/**
* async-tree.js Power by YUI-EXT and JSON.
*
* @author Seraph
* @email seraph115@gmail.com
*/
varAsyncTree = {
author: "Seraph",
version: "0.1.0"
};
// -> Configuration of tree. e.g: CG[1]
varCG = {
1: "asyncTreeProvider.do",
2: "async"
};
// -> Root-node name in Chinese. e.g: CN[1]
varCN = {
1: "菜单",
2: "配置"
};
// -> Root-node ID of tree. e.g: ID[1]
varID = {
1: "-1",
2: "-2"
};
Ext.onReady(function(){
varTree = Ext.tree;
varmyTreeLoader =newExt.tree.TreeLoader({
url: CG[1]
});
myTreeLoader.on("beforeload",function(treeLoader, node) {
myTreeLoader.baseParams.id = node.attributes.id;
}, myTreeLoader);
vartree =newTree.TreePanel({
el:'tree1',
autoScroll:true,
autoHeight: true,
border: false,
animate:true,
enableDD:true,
rootVisible:false,
containerScroll: true,
loader: myTreeLoader,
root: {
nodeType: CG[2],
text: CN[1],
id: ID[1]
}
});
tree.render();
tree.getRootNode().expand();
});
/**
* async-tree.js Power by YUI-EXT and JSON.
*
* @author Seraph
* @email seraph115@gmail.com
*/
var AsyncTree = {
author: "Seraph",
version: "0.1.0"
};
// -> Configuration of tree. e.g: CG[1]
var CG = {
1: "asyncTreeProvider.do",
2: "async"
};
// -> Root-node name in Chinese. e.g: CN[1]
var CN = {
1: "菜单",
2: "配置"
};
// -> Root-node ID of tree. e.g: ID[1]
var ID = {
1: "-1",
2: "-2"
};
Ext.onReady(function(){
var Tree = Ext.tree;
var myTreeLoader = new Ext.tree.TreeLoader({
url: CG[1]
});
myTreeLoader.on("beforeload", function(treeLoader, node) {
myTreeLoader.baseParams.id = node.attributes.id;
}, myTreeLoader);
var tree = new Tree.TreePanel({
el:'tree1',
autoScroll:true,
autoHeight: true,
border: false,
animate:true,
enableDD:true,
rootVisible:false,
containerScroll: true,
loader: myTreeLoader,
root: {
nodeType: CG[2],
text: CN[1],
id: ID[1]
}
});
tree.render();
tree.getRootNode().expand();
});
ext动态树 java_基于Ext异步加载tree的实例 - Seraph115 - JavaEye技术网站相关推荐
- python 异步加载图片_Python 爬取拉钩网异步加载页面
如下是我简单的获取拉钩网异步加载页面信息的过程 获取的是深圳 Python 岗位的所有信息,并保存在Mongo中 (对于异步加载,有的人说是把你要爬页面的信息整个页面先爬下来,保存本地,然后再看有没有 ...
- bootstrap 树形表格渲染慢_layUI之树状表格异步加载组件treetableAsync.js(基于treetable.js)...
概述 后台框架中使用树状表格是非常常用的操作,layUI本身并没有这种组件. 第三方的treetable.js做到了完美的实现,但是不能实现在双击时异步加载数据,本文就是站在了巨人的肩膀上实现的异步加 ...
- extjs2.0 ie8 下拉树_extjs2下拉树选项框comboxWithTree(支持异步加载子节点)
extjs版本:2.2 简介:支持单选.异步加载子节点(当然一下子拼接好全部节点的json也是绝对没问题的),要支持多选则需要自行设置,(已测试通过)浏览器兼容ie8.谷歌.FF. 资料参考:搜索一下 ...
- ExtJS 异步加载树节点
var Tree_Item = Ext.tree; //定义根节点的Loader if (treepanelItem == undefined) { treepanelItem = new Tree_ ...
- JQuery Datatables 动态配置参数异步加载数据
背景需求 在前端动态设置datatables需要传递到后端的查询参数,异步加载返回的数据.点击这里进入datatables中文网异步加载数据说明 直接上代码 var table; var url = ...
- Jquery Ztree异步加载树
1. 下载jquery的JS文件/ztree的CSS文件和JS文件 https://jquery.com/download/ https://gitee.com/zTree/zTree_v3/tree ...
- ztree异步加载数据amp;amp;amp;amp;amp;amp;amp;amp;给父节点动态追加子节点
对于ztree,整了两天了,在数据库中查出json符合格式的数据,这很好整,但是在ztree追加时出现重复节点,找了半天资源,最终还是用ztree自带的异步加载解决问题,特此记录一下下!!如果不足请指 ...
- vue-iview异步加载渲染树
<Tree v-show="curType=='archive'" :data="archiveTree" :load-data="loadDa ...
- vue 项目ztree 异步加载树
1.在data()添加setting设置 setting: {data: {simpleData: {enable: true,idKey: "",pIdKey: "&q ...
- 基于jQuery的图片异步加载和预加载实例
如今的网页中有很多图片,比如相册列表,那么如果一次性读取图片将会瞬间加重服务器的负担,所以我们用jQuery来实现图片的异步加载和预加载功能,这样在页面的可视范围内才会加载图片,当拖动页面至可视界面时 ...
最新文章
- 使用openssl给web站点颁发证书
- whitepages 被关闭_除了滑动关闭APP影响电池寿命,还有哪些操作触碰到了你的知识盲区?...
- numpy.random.randint详解
- pythonif有多个条件怎么办_Python中if有多个条件处理方法
- 0027-如何在CDH集群启用Kerberos
- mysql pgsql 2017,DB-Engines 2017 年度数据库:PostgreSQL 实至名归
- 1.2开发文档简读,了解全貌.mp4
- 国内成品油价近期历次调整一览
- SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!
- 案例学习BlazeDS+Spring之三InSync01查找联系人
- homework-06
- 《英雄联盟》设计师NORMAN的游戏设计之路
- html之页面元素印射
- 项目总结:初稿与定稿,方向相差180度
- java实验目的_java实验报告一
- 云购PHP,高仿一元云购CMS-PHP源码
- 移动前端开发和 Web 前端开发的区别是什么?
- 小米允许安装未知来源不用sim卡_视频能独立通话的小米手表,会像小米手机一样好用吗?...
- win10 远程桌面卡顿_主编教你win10系统使用远程桌面卡顿的步骤
- 使用vscode,根据vue基础模板文件生成代码