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