|
该帖已经被评为良好帖
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2008-07-25 关键字: e3.tree
E3在线演示:http://www.javae3.com/Index.jsp
本文同步发表到如下网站:
//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页面合适区域使用如下语句将树脚本输出就可以. XTreeBuilder构造的树: //打开指定页面
//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的话,你还可以调用如下脚本将树全部展开: 仅供参考: //功能菜单信息表 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)以及其他的一些业务属性字段. 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 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-21
就是代码最好可以套在代码框里,这样显示更清楚
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-21
重新编辑了,谢谢提醒!
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-21
good,后续教程把taglib的使用方式也讲一下,tagib方式简单很多,屏蔽掉很多概念.
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-22
huangyh 写道 good,后续教程把taglib的使用方式也讲一下,tagib方式简单很多,屏蔽掉很多概念.
要得,越简单越好,简单就是美! |
|
| 返回顶楼 | |
|
最后更新时间:2008-05-23
能不能讲解下异步加载节点!!!
|
|
| 返回顶楼 | |
|
最后更新时间:2008-05-24
yuyoo4j 写道 能不能讲解下异步加载节点!!!
后续教程中会逐步讲到的,包括,异步加载,拖拽,单选,复选等 将会在【E3.Tree高级应用篇】中涉及... |
|
| 返回顶楼 | |
|
最后更新时间:2008-06-19
期待lz的进一步讲解
|
|
| 返回顶楼 | |
|
最后更新时间:2008-07-04
andy54321 写道 期待lz的进一步讲解
即将发布E3.tree高级应用。 |
|
| 返回顶楼 | |
|
最后更新时间:2008-07-08
也是刚刚接触E3tree。我在看e3tree参考手册中有写的“业务数据对象”Org.这个业务数据对象是我的数据表的POJO。
数据表里的ID是LONG类型。文档里写必须要字符串吗? Org jcjtOrg = new Org("001",null,"进创集团", 1); 而且是001形式的?还是需要另加一个字段。设置成字符串? |
|
| 返回顶楼 | |










