版权声明:本文为sunziren原创文章,博客园首发,转载务必注明出处以及作者名称。
Easyui-Tree和Combotree所使用的数据结构是类似的,在我的上一篇文章《Easyui-Treegrid使用注意事项-sunziren》中,提到了两种数据格式。第一种数据间是平级的,第二种是包含关系,子数据被包在父数据的children属性中。
Tree和Combotree使用的就是第二种数据格式。本文着重记录一下如何生成第二种数据格式。
1. 首先需要定义一个工具类:TreeBeen。这个类相当于一条完整的数据。包括了属性:id、text、attributes、children、state这五个属性。其中attributes属性用来存储该条数据的其他属性;children为当前数据的子数据,格式为List
TreeBeen的源代码如下,很简单,值得注意的是,他的children属性List的泛型正好是TreeBeen类型。
package com.basefrm.util; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; public class TreeBean { private String id; private String text; private Mapattributes = new HashMap (); private List children = new ArrayList (); private String state = "open"; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getText() { return text; } public void setText(String text) { this.text = text; } public Map getAttributes() { return attributes; } public void setAttributes(Map attributes) { this.attributes = attributes; } public String getState() { return state; } public void setState(String state) { this.state = state; } public TreeBean(String id, String text, Map attributes, String state) { super(); this.id = id; this.text = text; this.attributes = attributes; this.state = state; } public TreeBean() { super(); } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; } }
2. 我们知道,前台需要的是Json格式的字符串,我们首先需要把包含层级关系的数据从数据库查出来,3个字段是必须的。id,pid,text。其他字段查出来可以放到TreeBeen的attributes属性中。而且我们注意到,要拼这个json格式的字符串,我们肯定是需要循环的,但是我们不知道整个数据一共包括几个层级,因此我们不知道具体设置几个嵌套循环,因此这个我们需要一个递归的方法。先放代码吧,然后我在解释一下。
//构建树的方法(递归) private ListbuildTree(List
方法buildTree是一个递归方法,他在内部调用了自己。参数List
通过这个办法,我成功了实现了tree和combotree。当然,这个方法还有个一优化的地方,如果你有什么不明白的地方或者建议,请在评论区回复我,我会及时回复你的。