说明:
两个文件
jackyNode.java treeVO对象 将数据库当中的树的数据库存入此
jackytree.java 采用递归算法 将一次性查出来的数据生成treeJSON结构
直接将两个文件复制到eclipse中 run as即可查看
jackyNode.java
- package com.codeasy.common;
- public class jackyNode {
- private int id;
- private int parentId;
- private String text;
- jackyNode(){}
- jackyNode(int id,int parentId,String text){
- this.id=id;
- this.parentId = parentId;
- this.text = text;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public int getParentId() {
- return parentId;
- }
- public void setParentId(int parentId) {
- this.parentId = parentId;
- }
- public String getText() {
- return text;
- }
- public void setText(String text) {
- this.text = text;
- }
- }
package com.codeasy.common;
public class jackyNode {
private int id;
private int parentId;
private String text;
jackyNode(){}
jackyNode(int id,int parentId,String text){
this.id=id;
this.parentId = parentId;
this.text = text;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getParentId() {
return parentId;
}
public void setParentId(int parentId) {
this.parentId = parentId;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
jackytree.java
- package com.codeasy.common;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- /*
- * 数据库中的表结构是这样的
- * id parentid name
- *
- *
- *
- */
- public class jackytree {
- List nodeList =new ArrayList();
- jackytree(){//构造方法里初始化模拟List
- jackyNode node1 = new jackyNode(1,0,"根节点");
- jackyNode node2 = new jackyNode(2,1,"一级菜单");
- jackyNode node3 = new jackyNode(3,1,"一级菜单");
- jackyNode node4 = new jackyNode(4,2,"二级菜单");
- jackyNode node5 = new jackyNode(5,2,"二级菜单");
- jackyNode node6 = new jackyNode(6,2,"二级菜单");
- jackyNode node7 = new jackyNode(7,6,"三级菜单");
- jackyNode node8 = new jackyNode(8,6,"三级菜单");
- nodeList.add(node1);
- nodeList.add(node2);
- nodeList.add(node3);
- nodeList.add(node4);
- nodeList.add(node5);
- nodeList.add(node6);
- nodeList.add(node7);
- nodeList.add(node8);
- }
- StringBuffer returnStr=new StringBuffer();
- public void recursionFn(List list , jackyNode node){
- if(hasChild(list,node)){
- returnStr.append("{id:");
- returnStr.append(node.getId());
- returnStr.append(",text:'");
- returnStr.append(node.getText());
- returnStr.append("'");
- returnStr.append(",children:[");
- List childList = getChildList(list,node);
- Iterator it = childList.iterator();
- while(it.hasNext()){
- jackyNode n = (jackyNode)it.next();
- recursionFn(list,n);
- }
- returnStr.append("]},");
- }else{
- returnStr.append("{id:");
- returnStr.append(node.getId());
- returnStr.append(",text:'");
- returnStr.append(node.getText());
- returnStr.append("'");
- returnStr.append(",leaf:true},");
- }
- }
- public boolean hasChild(List list, jackyNode node){ //判断是否有子节点
- return getChildList(list,node).size()>0?true:false;
- }
- public List getChildList(List list , jackyNode node){ //得到子节点列表
- List li = new ArrayList();
- Iterator it = list.iterator();
- while(it.hasNext()){
- jackyNode n = (jackyNode)it.next();
- if(n.getParentId()==node.getId()){
- li.add(n);
- }
- }
- return li;
- }
- public String modifyStr(String returnStr){//修饰一下才能满足Extjs的Json格式
- return ("["+returnStr+"]").replaceAll(",]", "]");
- }
- public static void main(String[] args) {
- jackytree r = new jackytree();
- r.recursionFn(r.nodeList, new jackyNode(1,0,"根节点"));
- System.out.println(r.modifyStr(r.returnStr.toString()));
- }
- }