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


1.前端頁面使用easyui的tree

1 <ul id="some_tree"></ul>
2 
3 $("#some_tree").tree({
4     url:'/getTreeJsonData.action',
5     lines :true,
6     onClick :function(node){
7     //TODO : after click
8     }
9 });

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()) ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM