public static List<treeNode> formatTree(List<treeNode> list) {
treeNode root = new treeNode();//根節點
treeNode node = new treeNode();//根節點下邊的子節點
List<treeNode> treelist = new ArrayList<treeNode>();// 拼湊好的json格式的數據
List<treeNode> parentnodes = new ArrayList<treeNode>();// 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())){//用node的父節點與root的節點作對比如果相等則放到
//roo節點下邊,同時將該node節點放到root(根節點)的孩子節點裡
//為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<treeNode> parentnodes, treeNode node) {
//循環遍歷所有父節點和node進行匹配,確定父子關系
for (int i = parentnodes.size() - 1; i >= 0; i--) {
treeNode pnode = parentnodes.get(i);
//如果是父子關系,為父節點增加子節點,退出for循環
if (pnode.getId().equals(node.getPid())) {
pnode.setState("closed") ;//關閉二級樹
pnode.getChildren().add(node) ;
return ;
} /* else {
//如果不是父子關系,刪除父節點棧裡當前的節點,
//繼續此次循環,直到確定父子關系或不存在退出for循環
// parentnodes.remove(i) ;
}*/
}
}
$('#DHtree').tree({
url:'permissionAction_DHtree.do?tagTree=tagTree',
lines:true,
onClick: function(node){
Rights_management = node.attributes;
if(node.nodetype == '2'){
var $this = $(this);
var href = $this.attr('src');
var title = $this.text();
addTab(node.text, '<%=path%>'+node.attributes);
}else{
$(this).tree(node.state === 'closed' ? 'expand' : 'collapse', node.target);
node.state = node.state === 'closed' ? 'open' : 'closed';
}
}
});