E3.Tree入门与进阶篇

E3在线演示:http://www.javae3.com/Index.jsp

 

本文同步发表到如下网站:
http://user.qzone.qq.com/307916217/blog/1211390631

http://www.javae3.com/posts/list/51.page#107

1.写在最前面
用E3组件很久了,对于黄老大滴无私奉献精神盛为感动。一直以来想帮着做点什么,今天,写此一文,希望能对初次接触E3的朋友有一定参考借鉴意义。谨以此为E3的成长壮大献上自己一点绵薄之力,了表心意。鉴于作者水平和精力有限,恳请各路大侠们批评指正!
E3官方网站:http://www.javae3.com   QQGroup:63787587

2.E3.Tree简单介绍
E3.Tree包装了著名的Xtree JS和时下流行的Ext.Tree.(想了解更多就自己Google吧)E3.Tree屏蔽了各种JS的差异提供统一的Java编程接口
来生成相应的树JS脚本并输出到Web页面显示.

3.E3.Tree入门篇
用原始点的方法构造一颗简单的树
Java代码如下所示:

//new一个树模型构造器
DefaultTreeModel treeModel = new DefaultTreeModel();

//new一个节点
WebTreeNode rootNode = new WebTreeNode("团长", "root");
//添加节点事件
rootNode.setAction("javascript:doAction('./main.jsp')");
//设置节点图片
rootNode.setIcon(RequestUtil.getUrl("/resource/images/xgll_06.png", request));
//将rootNode绑定为树根节点
treeModel.addRootNode(rootNode);

//再new一个节点
WebTreeNode node1 = new WebTreeNode("一营长", "node1");
//添加节点事件
node1.setAction("");
//设置节点图片
node1.setIcon(RequestUtil.getUrl("/resource/images/xgll_03.png", request));
//将node1绑定为树根节点的一个儿子节点
rootNode.addNode(node1);

//再new一个节点
WebTreeNode node2 = new WebTreeNode("二营长", "node2");
//添加节点事件
node2.setAction("");
//设置节点图片
node2.setIcon(RequestUtil.getUrl("/resource/images/xgll_03.png", request));
//将node2绑定为树根节点的一个儿子节点
rootNode.addNode(node2);

//再new一个节点
WebTreeNode node3 = new WebTreeNode("二营一连长", "node3");
//添加节点事件
node3.setAction("");
//设置节点图片
node3.setIcon(RequestUtil.getUrl("/resource/images/xgll_03.png", request));
//将node2绑定为node2的一个儿子节点
node2.addNode(node3);

//构造树导向器
TreeDirector director = new DefaultTreeDirector();
//构造树Builder(XTree)(图1)
XTreeBuilder treeBuilder = new XTreeBuilder();
//设置树客户端持久状态(记住当前节点展开状态),只针对XTree有效
treeBuilder.setUsePersistence(true);
/*
如果你想生成一颗EXT.Tree的话,就使用下面的Builder来构造这棵树,可见使用E3.Tree对不同的JS树模型提供了统一的编程接口,在不同的数模型之间切换时非常方便的,甚至只需要一行代码就搞定。可见黄老大一片良苦用心。。。
*/
//构造EXT.Tree的Builder()(图2)
//ExtTreeBuilder treeBuilder = new ExtTreeBuilder();
//设置EXT.Panel风格的树标题
//treeBuilder.setTitle("这是一颗EXT版的E3.Tree");
treeBuilder.init(request);
//完成构造任务
director.build(treeModel, treeBuilder);
//获取构造树脚本,说明此脚本即为在你WEB 页面上显示的树脚本,因此如果WEB页面树显示不正常,请先调试确认是否生成了此脚本.
String treeScript = treeBuilder.getTreeScript();
//调试用
//log.info(treeScript);
//System.out.println("The TreeScript as follows:\n" + treeScript);
//这就没必要再写了吧!就是把树脚本放到request域完成和WebUI的交互显示了.
request.setAttribute("treeScript", treeScript);
//

现在我们还剩下的事就是如何在Web页面上把这颗树显示出来了,这个很简单.只要在你的JSP页面合适区域使用如下语句将树脚本输出就可以.
<%= request.getAttribute("treeScript")%>或者${treeScript}或者...
如果你幸运的话,你应该在页面上看到如下所示的树了。

XTreeBuilder构造的树:

EXTTreeBuilder构造的树:

至此一棵树就算构建完了,但我想你肯定不仅仅满足于此吧。你肯定还想把这棵树放在你首页布局框架的左边,然后单你点击树节点的时候,在你的框架业务区域打开相应界面吧,如果是这样的话那接的往下看 --->
我们以一营长为例:
应用场景:当点击一营长的时候,在框架(Frame)指定区域打开一个页面或者发出一个reques请求执行一个Action方法或者执行一个脚本函数等等.
首先在一营长节点添加单击事件,代码如下

//打开指定页面
//node1.setAction("./main.jsp");
//请求执行Action方法
node1.setAction("./xgllstzyxhcms/confraternityIntroduceAction.go?reqCode=init");
然后,在JSP页面写入如下JS函数:
function doAction(url){
//mainFrame为你指定框架区域的名字
parent.mainFrame.location.href = url;
}

小技巧:如果你的树是使用XTreeBuilder构造出的E3.Tree的话,你还可以调用如下脚本将树全部展开:
root.expandAll();
全部收缩没忘记了 : ) 需要的话自己去查WebFX 的XTree相关资料即可.
下课。。。

4.E3.Tree进阶篇
起立。。。
上一节中我们一起学习了E3.tree的基本"原理"(很基础的了)和一些简单的用法.但在实际应用中,我想更多的应用场景是这样的,你可能要根据数据库里存储的数据来动态的生成一棵树吧,比如说我们的权限管理系统的组织机构模型或者根据其他一些业务需求而生成的业务树。总而言之,都有一个特点就是树的数据源是动态的,数据均来自于数据库或者XML文档等。并非像上一节中所讲的每一个节点以及节点的父子关系都是手动添加。下面,我们就以权限管理根据登录用户的角色而动态生成一颗业务菜单树为例来一起学习一下,本实例的数据源来自数据库(H2)
插上一句,关于H2:
H2是一款非常优秀很非常轻量(体积角度,整个数据库才1.3M)Java开源数据库,也许大家熟知的是HsqlDB,但如果你真的花时间认真用过这两个开源DB后,我保证你会深深爱上H2 顺便宣传一下,因为国内用这个的的确很少,资料也非常有限,半年前我第一次用的时候基本上搜索不出什么中文字资料来。这几天见有个小胖在JavaEye上极力宣传搞普及推广,偶也借此机会再此广告一把.还有H2的作者也是一个非常热心的人,回复我的技术问题邮件甚至还给我纠正拼写错误语法错误和一些建议。不甚感激,希望H2越来越火!
H2官方网站:http://www.h2database.com/

4.1.根据数据库构造树,我们首先要有一个存储树节点的数据表,而且这个表结构要能反映出树的一些属性以及树的级联父子关系来.如下为我的H2见表脚本,

仅供参考:

//功能菜单信息表 AB01
DROP TABLE IF EXISTS AB01;
CREATE TABLE AB01(
AB0101 VARCHAR(6) NOT NULL PRIMARY KEY, --功能编号
AB0102 VARCHAR(50) NOT NULL, --功能名称
AB0103 VARCHAR(6), --上级功能编号
AB0104 VARCHAR(100), --菜单图片URI
AB0105 VARCHAR(100), --功能目标地址
AB0107 VARCHAR(2), --菜单项类型
AB0108 INT, --菜单排序号
AB0199 VARCHAR(50) --
);

大家可以看到我的表结构中包含了树节点属性字段(AB0102,AB0104,Ab0105)和树父子关系字段(AB0103)以及其他的一些业务属性字段.
4.2. 我们在数据库中加入如下图所示的一些菜单数据信息.

注意:跟节点的上级节点应为Null

4.3.我们用E3.Tree引擎老动态的上图中的数据关系来生成这棵树.

log.info("开始启动E3模板引擎绘制导航菜单...");
Ab03Domain ab03 = (Ab03Domain)request.getSession().getAttribute("userInfo");
//获取登录用户所属岗位
Ab04Domain ab04 = ab04Dao.readAb04DomainByAb0301(ab03.getAb0301());
//获取岗位菜单列表
List menuList = ab05Dao.readMenuListByAb0201(ab04.getAb0201());
//业务数据解码器,从业务数据中分解出id和parentid
UserDataUncoder menuUncoder = new UserDataUncoder(){
//获取当前节点编号
public Object getID(Object userData) throws UncodeException {
Ab01Domain ab01 = (Ab01Domain)userData;
return ab01.getAb0101();
}
//获取父亲节点编号
public Object getParentID(Object userData) throws UncodeException {
Ab01Domain ab01 = (Ab01Domain)userData;
return ab01.getAb0103();
}
};
//Tree模型构造器,用于生成树模型
AbstractWebTreeModelCreator treeModelCreator = new AbstractWebTreeModelCreator(){
//该方法负责将业务数据映射到树型节点
protected Node createNode(Object userData, UserDataUncoder uncoder) {
Ab01Domain ab01 = (Ab01Domain)userData;
WebTreeNode result = new WebTreeNode(ab01.getAb0102(), "node" + ab01.getAb0101());
result.setAction("javascript:doAction('" + ab01.getAb0105() +"')");
return result;
}
};
treeModelCreator.init(request);
TreeModel treeModel = treeModelCreator.create(menuList, menuUncoder);
TreeDirector director = new DefaultTreeDirector();//构造树导向器
ExtTreeBuilder treeBuilder = new ExtTreeBuilder();//构造树Builder
//XTreeBuilder treeBuilder = new XTreeBuilder();
treeBuilder.init(request);
//treeBuilder.setTitle("eRedC2WP V 0.1");
director.build(treeModel, treeBuilder);//执行构造
String treeScript = treeBuilder.getTreeScript();//获取构造树的脚本
request.setAttribute("treeScript", treeScript);
log.info("导航菜单绘制完成!");

批注:有了第一节的基础,我想看上面这段代码应该不难了吧!我的DAO实现你不用管,只是个接口而已,后面的实现可以是数据库取数据可以是XML取数据等等。你只需要看明白整个构造树的流程把数据源换成你的就可以了.已经凌晨3:00了。偶就不详细解释了,有问题的可以到E3论坛里寻求技术支持. http://www.javae3.com
4.4.动态生成的E3.Tree效果图如下


课程表:
下一节课将讲解如下内容:
『EXT.Layout布局与E3.Tree的完美整合』
预计发布时间:2008-05-25,敬请期待。。。
读者对象:
a.对业界流行的时髦JS框架EXT有所了解
b.已经学习了E3.Tree入门与进阶篇掌握了E3.Tree基本应用的读者
授课目标:
抛弃FrameSet,使用酷炫的EXT.Layout完成企业应用系统结构的布局,并与E3.tree完美整合.

最后,偶代表黄老大感谢各位对E3的支持与厚爱。

2008年5月21日 AM 03:17:18 XiongChun@昆明
作者技术Blog:
http://user.qzone.qq.com/307916217

e3tree参考手册 java web开发网站会用到,跟动态生成静态页一起用,因为该技术是一次性将数据全部读取出来 立即下载

相关推荐

E3tree开发文档

让愿意使用E3.tree的朋友可以尽快的熟悉并使用E3.tree的开发环境,使用通用的组件以提高开发的效率

E3.Tree参考手册

E3.Tree参考手册 (v1.0) 目录 简介 2 系统要求 2 新增功能 2 升级说明 2 样例部署 2 使用 4 Lib文件清单 4 使用taglib 4 添加JAR到classpath中 8 业务数据对象 8 控制器Servlet 9 JSP页面 11 web.xml配置 11 测试 12 体系结构 12 设计模型 13 API代码片段 20 ...

jc_dreaming2的博客 302

E3Tree参考手册,很实用

E3Tree参考手册,喜欢E3Tree的下来看看

Tree树状结构显示(dtree、xtree、ExtTree、E3tree、ztree)

最近在做一个树状结构显示的小项目,其中要用到将大量数据异步显示在web页面里,从而就开始了我的大范围查找树的样例和过程。树状结构显示据我看到的比较流行的有dtree、xtree、EXTtree、E3tree、ztree。在本人的项目中使用的是ztree,它也是所有中功能最强大的树。下面我分别介绍一下它们。 1 dtree dtree是就是一个js的开源树形组件,使用特别简单,可以根据...

weixin_33725270的博客 447

用js写的tree组件 xtree2

用js写的tree组件,这是第二部分,和一放入同一js文件

Cesium体渲染实战:从医学CT到气象数据的3D可视化全攻略

本文详细介绍了如何利用Cesium体渲染技术实现医学CT和气象数据的3D可视化。从数据预处理到交互式渲染,涵盖了DICOM和NetCDF格式的处理技巧,以及性能优化的实战策略,帮助开发者高效处理复杂的三维数据集。

weixin_28717431的博客 420

e3.tree 1.5 发布,很好,很强大,有截图

E3.Tree是E3平台下一个用于构造树型UI(menu,tree,outlookbar等)的的组件, E3.Tree 特色:  1:部署简单,只需要把相关jar放到WEB-INF/lib目录下即可  2:构造树,菜单等树型UI的开发模式一致  3:提供了API和taglib 2种使用方式,使用简单,功能强大  4:能够很容易把现有的树型UI集成进来,现在支持的有:xtree,...

huangyh 225

手把手教你用LTspice仿真BUCK-BOOST电路(附波形分析)

本文详细介绍了如何使用LTspice进行BUCK-BOOST电路的仿真与波形分析,涵盖电路原理、CCM与DCM模式特性、效率优化及常见问题解决方案。通过实战案例,帮助工程师快速掌握升降压转换电路的设计与调试技巧,提升电力电子设计能力。

julia4scientist的博客 1048

e3.tree参考手册

e3.tree参考手册 简介 1. E3.Tree是E3平台下一个用于构造树型UI(menu,tree,outlookbar等)的的组件, E3.Tree 特色  部署简单,只需要把相关jar放到WEB-INF/lib目录下即可  构造树,菜单等树型UI的开发模式一致,  提供了API和taglib 2种使用方式,使用简单,功能强大  ...

weixin_30437481的博客 247

用python将dycom .dcm格式图像转换为nifti .nii

因为发现目前搜索到的多数中文教程并不能正确将FMRI图像正确转换,例如很多用simpleITk的seriesreader的,所以写了一下自己正确转换的方法。因为FMRI是一个4D数据,有时间轴,所以用seriesreader读写出来的图像把时间轴维度给降维了。当然你用SPM12工具的dycom import也是能正确转换的,但是我还是喜欢python这样的,代码直接简单。

qq_41103479的博客 3609

利用腾讯云轻量服务器快速搭建网站CDN

腾讯云的轻量最近在主机和站长中间可谓是占尽来风头,优秀的线路,低廉的价格使得越来越多的人开始使用腾讯云的轻量级服务器来部署应用。由于腾讯云轻量服务器的海外服务器电信走的是CN2GIA线路带宽30m挺适合做CDN的,我就记录一下如何利用腾讯云香港的轻量服务器搭建一个CDN。 购买服务器 首先选购服务器,最近腾讯云在做活动,力度很大国内备案用户可以选用国内的服务器最低128元/年,未备案的可以选用香港或者新加坡的服务器。 购买链接 服务器系统选Debian、Ubuntu、centos都可以 一键脚

demo_top的博客 2565

E3 tree复选树代码

//         业务数据解码器,从业务数据中分解出ID和PARENTID         UserDataUncoder uncoder = new UserDataUncoder(){         public Object getID(Object arg0)

dcsoft_nick的专栏 671

esp32c6 开发实战:低功耗蓝牙(BLE)开发

蓝牙栈在此程序流程中已经启动并运行,但是应用程序的功能尚未定义。功能的定义是通过响应事件来实现的,当其他设备尝试读取或写入参数以及建立连接时就会触发事件回调函数处理。BT控制器在控制器端实现主机控制器接口(HCI),链路层(LL)和物理层(PHY)。BT控制器对用户应用程序不可见,并处理BLE堆栈的较低层。蓝牙堆栈(Bluedroid stack)定义了经典蓝牙(BT Classic)和低功耗蓝牙(BLE)的通用定义和API。的判断)等对于启动低功耗蓝牙来说不重要的代码,函数初始化和启用BT控制器。

月入鱼饵的博客 2742

E3首席讲师熊春系列文章之E3.Tree入门与进阶篇

huangyh 2008-11-18 1.写在最前面 用E3组件很久了,对于黄老大滴无私奉献精神盛为感动。一直以来想帮着做点什么,今天,写此一文,希望能对初次接触E3的朋友有一定参考借鉴意义。谨以此为E3的成长壮大献上自己一点绵薄之力,了表心意。鉴于作者水平和精力有限,恳请各路大侠们批评指正! E3官方网站:http://www.javae3.com 2.E3.Tree简单...

小头猪 396

摄像头模组CCM简介

摄像头模组,全称Camera Compact Module,简写为CCM。CCM 包含几大件: 镜头(lens)、音圈马达(VCM)、传感器(sensor)、软板(FPC)、图像处理芯片(DSP)。工作原理:物体通过镜头(lens)聚集的光,通过CMOS或CCD集成电路,把光信号转换成电信号,再经过内部图像处理器(ISP)转换成数字图像信号输出到数字信号处理器(DSP)加工处理,转换成标准的GRB、YUV等格式图像信号。摄像头模组主要由以下几个部分组成:镜头(Lens):将光线汇聚到图像传感器上。

m0_73482095的博客 1万+

1.3-----Simplify 3D切片软件:从新手困惑到高效打印的进阶设置指南

本文详细介绍了Simplify 3D切片软件在大型模型打印中的高效设置技巧,包括切片效率、支撑结构智能生成和精细参数调节等核心优势。通过实战案例和进阶参数设置指南,帮助用户从新手快速进阶到高效打印,显著提升3D打印质量和效率。

weixin_42552716的博客 422

E3 TREE 开发准备及简单树实现代码。

一、导入jar: commons-collections-2.1.1.jar commons-logging.jar E3-Base.jar E3-TemplateEngine.jar E3-Tree.jar log4j.jar velocity-1.4

dcsoft_nick的专栏 1783

粒子群优化与蚁群算法求解多旅行商问题

它要求在给定一组城市和旅行商之间的距离矩阵的情况下,找到一条最优的路径方案,使得所有旅行商可以分别从起始城市出发,途径其他城市,并最终回到起始城市,同时总旅行距离达到最小。这两种算法都是基于群体智能的优化算法,在求解组合优化问题时具有较好的性能表现。假设有n个城市需要被m个旅行商访问,城市间的距离由距离矩阵D表示,其中D(i,j)表示第i个城市到第j个城市的距离。粒子群优化算法是一种基于群体智能的优化算法,其中的粒子代表了潜在的解,并通过模拟粒子在解空间中的移动来搜索最优解。一、多旅行商问题建模。

m0_47037246的博客 553

E3 Tree 在 Glasshfish下bug的修复

对e3 tree 不了解的可以参考 http://e3.group.javaeye.com/ 由于在glasshfish下报一个这样的错误 Unable to read TLD "META-INF/E3Tree.tld" from JAR file "file:/D:/project/glassfish/domain/lotterysys/e3/WEB-INF/lib/e3.

上善若水 厚德载物 3万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

E3.Tree与EXT.Layout完美整合篇

E3在线演示地址:http://www.javae3.com/Index.jsp 同学们,熊师讲坛又开讲了。。。 音乐。。。 掌声。。。鲜花。。。美女。。。 课程题目: 『E3.Tree与EXT.Layout完美整合篇』 讲师: E3首席讲师.XiongChun 必备知识: (1)、已经学习并掌握了我的上一篇教程-【E3.Tree入门与进阶篇】 (2)、对EXT有一定了解和认识 ...

eRedLab 188

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

E3首席讲师熊春系列文章之E3.Tree与EXT.Layout完美整合篇

同学们,熊师讲坛又开讲了。。。 音乐。。。 掌声。。。鲜花。。。美女。。。 课程题目: 『E3.Tree与EXT.Layout完美整合篇』 讲师: E3首席讲师.XiongChun 必备知识: (1)、已经学习并掌握了我的上一篇教程-【E3.Tree入门与进阶篇】 (2)、对EXT有一定了解和认识 1.广告时间 1.1.E3简介 由国人黄老大以“分享...

小头猪 259

E3 tree 1.6在Firefox下显示问题的修复

tree 在Firefox下只显示一句话: 用firebug查看页面元素观察发现 两个script导入被一个分隔开了,显然是document.write的问题.由于Firefox对js规范的检查比较严格,肯定一些字符输出的的时候没有转义. 查看e3 tree的源代码: /E3Tree/src/net/jcreate/e3/tree/ext/ExtTreeBuilder.java

上善若水 厚德载物 1万+

Codeforces Round #629 (Div. 3) E.Tree Queries (DFS)

Codeforces Round #629 (Div. 3) E.Tree Queries (DFS) 思路:若ai 在路径上 ,则ai的父结点一定在路径上,若ai是路径上某个结点的子结点,则ai的父结点一定在路径上,综上只需考虑ai的父节点就行了。对每个ai判断一下ai-1是否能到达ai,若存一个不行则输出NO,反之输出YES. 用f[i]存储父结点,用dfs[i]记录访问顺序,用sz[i]保...

Harris-H的博客 1648

React D3 Tree 使用与部署指南

React D3 Tree 是一个基于 React 和 D3 的树状图组件,它使得在 React 应用中展示和交互复杂的层次结构数据变得简单直观。本指南将带你深入了解其内部结构、启动方式以及关键配置文件。 --- ## 1. 项目目录结构及介绍 项目根目录下主要包含以下核心部分: - **src**: 包含组件的核心源代码。 - `components`: 树形图组件及相关UI元素...

gitblog_00365的博客 1026

E3 Tree 在 Glasshfish下bug的修复

对e3 tree 不了解的可以参考 http://e3.group.javaeye.com/ 由于在glasshfish下报一个这样的错误 Unable to read TLD "META-INF/E3Tree.tld" from JAR file "file:/D:/project/glassfish/domain/lotterysys/e3/WEB-INF/lib/e3.jar": org....

上善若水 180
上一篇: 关于左侧树状菜单打开界面的目标区域定位问题
下一篇: Struts环境下EXT.Window的数据采集问题
eredlab
博客等级 码龄19年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值