442136713 发表于 2013-1-23 02:47:52

tree

       这几天忙着移植树,原先项目里用到是静态树(xTree),因为数据比较少,因此一次性加载,没有太多效率的问题,后来因为涉及的数据太多,如果一次性加载会耗费6、7秒的时间,用户体验特别差,实在难以忍受,考虑一次性加载完成的这个问题,决定换成动态树(xLoadTree2),也就是每一次只加载树的一级节点,采用异步加载的方式,速度上的确是快了很多,用户体验也还可以,但多少有一些缺憾,后来便换成了另一种动态树(dhtmlxTree),个人感觉比xLoadTree2要更加强大,实现方法:
StringBuffer sb = new StringBuffer();sb.append("<script language=\"javascript\">");sb.append("tree=new dhtmlXTreeObject(\"" + divId+ "\",\"100%\",\"100%\",\"newsCenter\");");//1sb.append("tree.loadXML(\"/tree/list1.do?id=newsCenter\");");//2sb.append("tree.setOnOpenEndHandler(doOpen);");//3sb.append("tree.setXMLAutoLoading(\"/tree/list1.do\");");//4sb.append("tree.setOnClickHandler(doClick);");//5sb.append("tree.setImagePat(\"/images/dhtmlxtree/csh_bluebooks/\");");//6sb.append("</script>"); 1,divId是页面中的document标识id,
 2,初次加载树时,获取树的路径,后面展示该方法
 3,doOpen是一个自定义的js函数,当打开树时所要处理的事情
 4,setXMLAutoLoading:自动加载数据
 5,doClick同样是一个自定义的js函数,用于处理点击节点时所要触发的事件,比如链接等等
 6,是树图片的路径
接下来是struts中生成xml(数据)的方法:
public String list1() throws IOException {// dhtmlxtreethis.getResponse().setContentType("text/xml; charset=utf-8");PrintWriter out = this.getResponse().getWriter();String id = this.getRequest().getParameter("id");if (Util.isblank(id)) {doc = new Document(new Element("tree").setAttribute("id", "a"));Element tree = doc.getRootElement();Element inner = new Element("item").setAttribute("text", "/");inner.setAttribute("id", "0");inner.setAttribute("child", "1");tree.addContent(inner);} else {generateXML(id);}Format format = Format.getCompactFormat();format.setEncoding("utf-8");format.setIndent("\t");XMLOutputter xout = new XMLOutputter(format);xout.output(doc, out);out.flush();out.close();return null;}private void transfer1(Document doc, List<Category> r, String type) {String oper = "";if (type.split("_").length > 1) {oper = type.split("_");}if ("newsPublish".equals(type) || "add".equals(oper)) {// 区别是发布还是维护oper = "_add";}if ("newsModify".equals(type) || "list".equals(oper)) {oper = "_list";}for (Iterator<Category> it = r.iterator(); it.hasNext();) {Category one = (Category) it.next();Element tree = null;tree = doc.getRootElement();Element inner = new Element("item").setAttribute("text", one.getName());inner.setAttribute("id", "" + one.getId() + oper);if (!one.isLeaf()) {inner.setAttribute("child", "1");}tree.addContent(inner);}}private void generateXML(String id) {if ("newsCenter".equals(id)) {// 信息管理中心doc = new Document(new Element("tree").setAttribute("id", id));Element tree = doc.getRootElement();Element inner = new Element("item").setAttribute("text", "信息发布");inner.setAttribute("id", "newsPublish");inner.setAttribute("child", "1");tree.addContent(inner);inner = new Element("item").setAttribute("text", "信息维护");inner.setAttribute("id", "newsModify");inner.setAttribute("child", "1");tree.addContent(inner);} else if ("newsPublish".equals(id) || "newsModify".equals(id)) {Category ca = categoryService.getByEname("newscenter");doc = new Document(new Element("tree").setAttribute("id", id));List<Category> list = categoryService.getCategorys(ca.getId(), "");transfer1(doc, list, id);}else {List<Category> list = categoryService.getCategorys(new Long(id.split("_")), "");doc = new Document(new Element("tree").setAttribute("id", id));transfer1(doc, list, id);}} 
 待续.......
页: [1]
查看完整版本: tree