实现E3树形结构的总结
tcgjz
2009-06-16
说明:
我从我业务角度出发总结下我实现E3树形结构的过程和步骤,到最后我在总结下我在此过程碰到的问题。我实现的是复选框样式。 -------------------------------------------------操作步骤开始------------------------------------------------------------------ 步骤一: 找到e3最新jar包 1.从http://e3.group.iteye.com/ 中找到 “E3样例下载” 此事列中找到e3.jar包 2.或者通过加入 E3平台联盟③群 群号63787587 在其群共享里找最新e3.jar包。 下载最新e3.jar包后 添加到工程lib文件夹下。 步骤二: 配置web.xml文件 把下面配置加入到 web.xml文件中(此处是根据E3平台联盟1群黄小勇的帮助下得到的) <filter> <filter-name>e3/resource</filter-name> <filter-class> net.jcreate.e3.resource.impl.ResourceFilter </filter-class> </filter> <filter-mapping> <filter-name>e3/resource</filter-name> <url-pattern>/e3/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>e3/resource</filter-name> <url-pattern>/net/jcreate/e3/*</url-pattern> </filter-mapping> 步骤三: 创建业务对象 public class DistributeOrgsInfor { /** * 这个ID 复选框的values值 */ private String id; /** * (父亲id)根目录此属性应该为空 */ private String parentid; /** * 页面显示项 */ private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getParentid() { return parentid; } public void setParentid(String parentid) { this.parentid = parentid; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 步骤三: 创建Dao得到树形结构的数据 public class DistributeStrategyDao { private void rs2Bean(ResultSet rs, DistributeOrgsInfor dispatch) throws java.sql.SQLException { if (dispatch == null) { return; } dispatch.setId(rs.getString("id"));// 节点ID dispatch.setParentid(rs.getString("parentid"));// 父节点id dispatch.setName(rs.getString("name"));// 名称 } (说明:下面的说明我只把和e3树形结构有关系的代码留下,无关紧要我都省略了) public static List getOrgs() { List result = new ArrayList(); String sql = " select v.A as id,v.B as parentid,v.C as name from XXXX表 v " ..................此处代码省略........................... try { ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { DistributeOrgsInfor dispatch = new DistributeOrgsInfor(); rs2Bean(rs, dispatch); result.add(dispatch); } } catch (Exception e) { .....省略 ...... } finally { try { .....省略 ...... } catch (SQLException e) { .....省略 ...... } } return result; } } 步骤四: 创建action,以及在action中如何调用e3的api (说明:此action 我用的struts2) --------------代码开始---------------------- package 此action的包路径; import ----一系列e3包和相关对象包-------- public class TreeAction extends ActionSupport { private List orgs = new ArrayList();// 存放树形组织结构信息 public List getOrgs() { return orgs; } public void setOrgs(List orgs) { this.orgs = orgs; } //此方法和展现树形结构的访问路径有关系,等我在说明访问路径你会看到 public String index(){ this.showTree; return "success"; } public void showTree(List list,List orgs,final String name) { List list=DistributeStrategyDao.getOrgs();//得到dao中树形结构数据 HttpServletRequest pRequest = ServletActionContext.getRequest(); //-----------------这里是我根据我的业务要求来处理下根目录-------------------------------- for(int i=0;i<list.size();i++){ DistributeOrgsInfor dispatch=new DistributeOrgsInfor(); dispatch=(DistributeOrgsInfor)list.get(i); if(dispatch.getName().equals("根目录名称")){//如果是根目录 此为根目录,父亲节点应该设置为空 dispatch.setParentid(null);//null所以此节点应该设置为空; } orgs.add(dispatch); } //------------------------------------------------------ //业务数据解码器,从业务数据中分解出id和parentid UserDataUncoder orgUncoder = new UserDataUncoder(){ public Object getID(Object pUserData) throws UncodeException { DistributeOrgsInfor dispatch = (DistributeOrgsInfor)pUserData; return dispatch.getId(); } public Object getParentID(Object pUserData) throws UncodeException { DistributeOrgsInfor dispatch = (DistributeOrgsInfor)pUserData; return dispatch.getParentid(); } }; //Tree模型构造器,用于生成树模型 AbstractWebTreeModelCreator treeModelCreator = new AbstractWebTreeModelCreator(){ //该方法负责将业务数据映射到树型节点 protected Node createNode(Object pUserData, UserDataUncoder pUncoder) { DistributeOrgsInfor dispatch = (DistributeOrgsInfor)pUserData; WebTreeNode result = new WebTreeNode(dispatch.getName(), "dispatch" + dispatch.getId()); //下面注销掉的是手动设置节点图片和展开节点图片 //result.setIcon(this.getUrl("e3/tree/xtree/images/foldericon.png")); //result.setOpenIcon(this.getUrl("/e3/tree/xtree/images/openfoldericon.png")); result.setValue(dispatch.getId()); //action是点击按纽执行的方法.可以是url,或者javascript函数 result.setAction("javascript:alert(' " + dispatch.getName() + "')"); return result; } }; treeModelCreator.init(pRequest); TreeModel treeModel = treeModelCreator.create(orgs,orgUncoder); TreeDirector director = new DefaultTreeDirector();//构造树导向器 //WebTreeBuilder treeBuilder = new CheckXTreeBuilder();//构造树Builder PrvCheckXTreeBuilder treeBuilder = new PrvCheckXTreeBuilder(); treeBuilder.init(pRequest); director.build(treeModel, treeBuilder);//执行构造 String treeScript = treeBuilder.getTreeScript();//获取构造树的脚本 pRequest.setAttribute("treeScript", treeScript);//保存到request,以便页面使用 } } 步骤五: 创建jsp--tree.jsp <%@ page contentType="text/html; charset=utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <script> function openURL(pURL){ parent.rightFrame.location.href = pURL; } function showSelectedNode(){ alert(getCheckValues());//得到选中的值 (说明:getCheckValues()方法得到的不是一个组合字符串而是一个数组这里一定要注意, 我一开始迷糊了后来在黄云辉的帮助下终于明白了,这里就不多说了,我在出现的问题中会仔细说明下) } </script> <HEAD> <META http-equiv=Content-Type content="text/html; charset=utf-8"> </HEAD> <BODY> <input type="button" value="确定" onclick="showSelectedNode()"/> <%= request.getAttribute("treeScript") %>//此处是显示树形结构的代码 </BODY> </HTML> 步骤六: 设置访问路径在struts.xml中 <action name="showTree_*" method="{1}" class="----路径省略------------.TreeAction"> <result name="success"> --路径省略--/tree.jsp </result> </action> 步骤七: 访问路径 http://127.0.0.1:8080/工程名/showTree_index.action (此index即就是我在action中为什么要index方法的原因,便于访问时找到访问action中的那个方法) ------------------------------操作步骤开始结束 |
|
huangyh
2009-06-17
谢谢 分享
|
|
linkboyhot
2009-07-22
对于卡片树,如果服务器比较慢,连续点击节点,页面被锁住,不知道是怎么回事(在IE6.0上)。
复选框树是不是不能自定义图标,因为定义的图标的路径显示的是绝对路径,并且在有些机器上看不到图标。 |
|
huangyh
2009-08-16
卡片树把动画效果禁用应该会好些,builder.setAnimal(false);
自定义图标肯定可以,自己参考样例处理 |
|
刘盼盼
2009-08-21
怎么没有右键菜单的操作哦?
|
|
sunshineparasol
2010-04-19
ok,好了
|
|
sunshineparasol
2010-04-19
ok,好了!!
|
|
tcgjz
2010-08-11
没事我再回来看看
|
|
tcgjz
2010-08-11
![]() |