1. 程式人生 > >生成樹形菜單

生成樹形菜單

bject ech ret 關閉 name get lose 父節點 葉子節點

題記------學習別人的精髓,並加以總結,消化吸收,這就是提高!!!

動態生成樹形菜單,前臺用easyui實現,非常簡單不贅述,主要給出後臺java的邏輯代碼

 1 package com.gongli.util.entity.treeMenu;
 2 
 3 
 4 
 5 /*
 6  * 用於封裝樹形菜單,無具體表與之對應,根節點為-1,節點0,然後父節點0,節點001,父節點001,節點001001,001002,001...依次類推
 7  */
 8 public class TreeMenu {
 9     private String parentId;//父節點id   
10     private
String nodeId;//後代節點id 11 private String perName;//權限名 12 private String icon;//顯示節點的圖標 13 private String url;//點擊樹形菜單的葉子節點時,請求的url路徑 14 public String getParentId() { 15 return parentId; 16 } 17 public void setParentId(String parentId) { 18 this.parentId = parentId;
19 } 20 public String getNodeId() { 21 return nodeId; 22 } 23 public void setNodeId(String nodeId) { 24 this.nodeId = nodeId; 25 } 26 public String getPerName() { 27 return perName; 28 } 29 public void setPerName(String perName) { 30 this
.perName = perName; 31 } 32 public String getIcon() { 33 return icon; 34 } 35 public void setIcon(String icon) { 36 this.icon = icon; 37 } 38 public String getUrl() { 39 return url; 40 } 41 public void setUrl(String url) { 42 this.url = url; 43 } 44 45 46 47 48 49 50 51 }
 1 package com.gongli.util.treeMenu;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import com.gongli.util.entity.treeMenu.TreeMenu;
 7 /**
 8  *樹形菜單工具類接口
 9  *使用前綴編碼,每級增加三個數字,如:第一級 001,第二級001001,第三級001001001,目錄根節點為0,目錄根節點的父節點為-1
10  */
11 public interface TreeMenuInteferce {
12     /** 
13      * 將樹形菜單封裝成樹
14      * @param list 為樹形菜單 
15      * @param fid 父id 
16      */  
17     public List<Map<String,Object>> createTree(List<TreeMenu> list, String fid);
18     /** 
19      * 遞歸設置TreeMenu樹 
20      * @param list 
21      * @param fid 
22      * @return 
23      */  
24     public List<Map<String, Object>> createChildren(List<TreeMenu> list, String fid);
25     
26 }

 1 package com.gongli.util.impl.treeMenu;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import com.gongli.util.entity.treeMenu.TreeMenu;
 9 import com.gongli.util.treeMenu.TreeMenuInteferce;
10 
11 public class TreeMenuInteferceImpl implements TreeMenuInteferce{
12     
13     /** 
14      * 將樹形菜單封裝成樹
15      * @param list 為樹形菜單 
16      * @param fid 父id 
17      */ 
18     @Override
19     public List<Map<String,Object>> createTree(List<TreeMenu> list, String fid) {  
20         //存放轉換後數據的集合  
21         List<Map<String,Object>> comboTreeList  = new ArrayList<Map<String,Object>>();
22         for (int i = 0; i < list.size(); i++) {  
23             Map<String, Object> map = null;  
24             TreeMenu treeMenu = (TreeMenu) list.get(i);  
25             if (treeMenu.getParentId().equals(fid)) {  
26                 map = new HashMap<String, Object>();  
27                 //這裏必須要將對象角色的id、name轉換成Tree在頁面的顯示形式id、text  
28                 map.put("id", list.get(i).getNodeId());         //id  
29                 map.put("text",list.get(i).getPerName());      //權限名  
30                 map.put("url", list.get(i).getUrl()); 
31                 map.put("iconCls", list.get(i).getIcon()); 
32                 map.put("children", createChildren(list, treeMenu.getNodeId()));  
33             }  
34             if (map != null)  
35                 comboTreeList.add(map);  
36         }  
37         return comboTreeList;
38     }  
39     
40     /** 
41      * 遞歸設置TreeMenu樹 
42      * @param list 
43      * @param fid 
44      * @return 
45      */  
46     @Override
47     public List<Map<String, Object>> createChildren(List<TreeMenu> list, String fid) {  
48         List<Map<String, Object>> childList = new ArrayList<Map<String, Object>>();  
49         for (int j = 0; j < list.size(); j++) {  
50             Map<String, Object> map = null;  
51             TreeMenu treeChild = (TreeMenu) list.get(j);  
52             if (treeChild.getParentId().equals(fid)) {  
53                 map = new HashMap<String, Object>();  
54                 map.put("id", list.get(j).getNodeId());  
55                 map.put("text", list.get(j).getPerName());
56                 map.put("url", list.get(j).getUrl()); 
57                 map.put("iconCls", list.get(j).getIcon()); 
58                 List<Map<String, Object>> list2 = createChildren(list, treeChild.getNodeId());
59                 //此處一定要註意,easyui中當節點為葉子節點時並且state為closed,該葉子節點會加載整個tree,形成死循環,所以要排除
60                 //給葉子節點賦值state:closed,但給非葉子節點賦值state:closed,則默認關閉除了第一個根節點以外的所有節點
61                 if(list2.size()>0){
62                     map.put("state", "closed"); 
63                 }
64                 map.put("children", createChildren(list, treeChild.getNodeId()));  
65             }                
66             if (map != null)  
67                 childList.add(map);  
68             }  
69         return childList;  
70     }  
71     
72 
73 
74 }

生成樹形菜單