锁定老帖子 主题:E3.Tree入门与进阶篇
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-05-21
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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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形式的?还是需要另加一个字段。设置成字符串? |
|
返回顶楼 | |