Java+oracle樹查詢實現easyui中tree使用的json

1.前端頁面使用easyui的tree

<ul id="some_tree"></ul>

$("#some_tree").tree({
    url:'/getTreeJsonData.action',
    lines :true,
    onClick :function(node){
    //TODO : after click
    }
});

2.創建TreeJson的dto

 import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONObject;
/**
 * easui中的tree_data.json數據,只能有一個root節點
 * [{  
    "id":1,  
    "text":"Folder1",  
    "iconCls":"icon-save",  
    "children":[{  
        "text":"File1",  
        "checked":true 
    }]  
}]
 * 提供靜態方法formatTree(List<TreeJson> list) 返回結果
 * TreeJson.formatTree(treeJsonlist) ;
 * @author lwb
 *
 */
public class TreeJson implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private String id ;
    private String pid ;
    private String text ;
    private String iconCls ;
    private String state ;
    private String checked ;
    private JSONObject attributes = new JSONObject() ;
    private List<TreeJson> children = new ArrayList<TreeJson>() ;
   
    /******** setter and getter **********/

public static List<TreeJson> formatTree(List<TreeJson> list) {

        TreeJson root = new TreeJson();
        TreeJson node = new TreeJson();
        List<TreeJson> treelist = new ArrayList<TreeJson>();// 拼湊好的json格式的數據
        List<TreeJson> parentnodes = new ArrayList<TreeJson>();// parentnodes存放所有的父節點
       
        if (list != null && list.size() > 0) {
            root = list.get(0) ;
            //循環遍歷oracle樹查詢的所有節點
            for (int i = 1; i < list.size(); i++) {
                node = list.get(i);
                if(node.getPid().equals(root.getId())){
                    //爲tree root 增加子節點
                    parentnodes.add(node) ;
                    root.getChildren().add(node) ;
                }else{//獲取root子節點的孩子節點
                    getChildrenNodes(parentnodes, node);
                    parentnodes.add(node) ;
                }
            }   
        }
        treelist.add(root) ;
        return treelist ;

    }

    private static void getChildrenNodes(List<TreeJson> parentnodes, TreeJson node) {
        //循環遍歷所有父節點和node進行匹配,確定父子關係
        for (int i = parentnodes.size() - 1; i >= 0; i--) {
           
            TreeJson pnode = parentnodes.get(i);
            //如果是父子關係,爲父節點增加子節點,退出for循環
            if (pnode.getId().equals(node.getPid())) {
                pnode.setState("closed") ;//關閉二級樹
                pnode.getChildren().add(node) ;
                return ;
            } else {
                //如果不是父子關係,刪除父節點棧裏當前的節點,
                //繼續此次循環,直到確定父子關係或不存在退出for循環
                parentnodes.remove(i) ;
            }
        }
    }
}

3.使用oracle樹查詢,查詢需要構建樹的記錄,轉換成TreeJson對象

 <typeAlias alias="treeJson" type="TreeJson"/>
   
<select id="queryATree" resultClass="treeJson" > 
       SELECT t.id,
            t.text,
            t.pid,
                  t.iconcls
     FROM table t
    start with t.pid= 0
    connect by t.pid= prior t.id
    ORDER SIBLINGS BY T.id
</select>

4.組合

oracle查詢結果爲List<TreeJson>,使用TreeJson對象的靜態方法formatTree將其轉換成前臺需要的tree_data.json數據返回到前臺

List<TreeJson> list = TreeJson.formatTree(dao.queryATree()) ;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章