java tree 樹形操做

 這裏做者將實現,經過數據庫獲取數據,再將數據經過遞歸形式裝成無限層級json數據,到達無限成級的樹結構。javascript

     效果如圖 
      實現步逐前端

          一、數據表設計(角色表)       java

Sql代碼 數據庫

  1. CREATE TABLE `role` (  
  2.   `id` varchar(32) NOT NULL,  
  3.   `createDate` datetime NOT NULL,  
  4.   `modifyDate` datetime NOT NULL,  
  5.   `name` varchar(64) NOT NULL,  
  6.   `isSystem` bit(1) NOT NULL,  
  7.   `description` varchar(256) NOT NULL,  
  8.   `fatherId` varchar(32) default '0' COMMENT '父id',  
  9.   PRIMARY KEY  (`id`)  
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8  

          二、實體類json

Java代碼 app

  1. /** 
  2.  * 實體類 - 角色 
  3.  */  
  4. public class Role extends BaseEntity {  
  5.   
  6.     private static final long serialVersionUID = -6614052029623997372L;  
  7.     private String name;                    //角色名稱  
  8.     private Boolean isSystem;               //是否爲系統內置角色  
  9.     private String description;             //描述  
  10.     private List<Admin> adminList;            //管理員  
  11.     private List<Resource> resourceList;  //資源  
  12.       
  13.     private String fatherId;                //父角色id  
  14.     private String fatherName;              //父角色名稱  
  15.       
  16.     private String children;                //子角色  
  17.     private String checked;                 //節點是否被選中  
  18.   
  19.     public String getName() {  
  20.         return name;  
  21.     }  
  22.   
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.       
  27.     public Boolean getIsSystem() {  
  28.         return isSystem;  
  29.     }  
  30.   
  31.     public void setIsSystem(Boolean isSystem) {  
  32.         this.isSystem = isSystem;  
  33.     }  
  34.   
  35.     public String getDescription() {  
  36.         return description;  
  37.     }  
  38.   
  39.     public void setDescription(String description) {  
  40.         this.description = description;  
  41.     }  
  42.   
  43.     public List<Admin> getAdminList() {  
  44.         return adminList;  
  45.     }  
  46.   
  47.     public void setAdminList(List<Admin> adminList) {  
  48.         this.adminList = adminList;  
  49.     }  
  50.   
  51.     public List<Resource> getResourceList() {  
  52.         return resourceList;  
  53.     }  
  54.   
  55.     public void setResourceList(List<Resource> resourceList) {  
  56.         this.resourceList = resourceList;  
  57.     }  
  58.   
  59.     public String getFatherId() {  
  60.         return fatherId;  
  61.     }  
  62.   
  63.     public void setFatherId(String fatherId) {  
  64.         this.fatherId = fatherId;  
  65.     }  
  66.   
  67.     public String getFatherName() {  
  68.         return fatherName;  
  69.     }  
  70.   
  71.     public void setFatherName(String fatherName) {  
  72.         this.fatherName = fatherName;  
  73.     }  
  74.   
  75.     public String getChildren() {  
  76.         return children;  
  77.     }  
  78.   
  79.     public void setChildren(String children) {  
  80.         this.children = children;  
  81.     }  
  82.   
  83.     public String getChecked() {  
  84.         return checked;  
  85.     }  
  86.   
  87.     public void setChecked(String checked) {  
  88.         this.checked = checked;  
  89.     }  
  90. }  

        三、將角色封裝成無限層級的json數據形式的關鍵代碼,前端js調用方法this

Java代碼 spa

 收藏代碼

  1. //存放轉換後數據的集合  
  2. List<Map<String,Object>> comboTreeList  =new ArrayList<Map<String,Object>>();  
  3.   
  4. /** 
  5.  * 返回 treeGrid(樹形表格)須要的json格式數據 
  6.  * 前端調用的就是這個方法 
  7.  */  
  8. @SuppressWarnings("unchecked")  
  9. public String backComboTreeTreeRole(){  
  10.         //獲得全部角色  
  11.     List<Role> list = roleService.getRoleAll();  
  12.       
  13.     //調用方法實現角色樹  
  14.     createComboTreeTree(list,"0");  
  15.       
  16.     //將集合轉換爲json輸出到頁面  
  17.     Gson gson = new Gson();  
  18.     String json = gson.toJson(comboTreeList);  
  19.       
  20.     try {  
  21.         ServletActionContext.getResponse().getWriter().print(json);  
  22.         ServletActionContext.getResponse().getWriter().flush();  
  23.         ServletActionContext.getResponse().getWriter().close();  
  24.     }catch (IOException e) {  
  25.         e.printStackTrace();  
  26.     }     
  27.       
  28.     System.out.println(json);  
  29.     return null;  
  30. }  
  31.   
  32.   
  33. /** 
  34.  * 將角色封裝成樹開始 
  35.  * @param list 
  36.  * @param fid 父id 
  37.  */  
  38. private void createComboTreeTree(List<Role> list, String fid) {  
  39.     for (int i = 0; i < list.size(); i++) {  
  40.         Map<String, Object> map = null;  
  41.         Role role = (Role) list.get(i);  
  42.         if (role.getFatherId().equals("0")) {  
  43.             map = new HashMap<String, Object>();  
  44.             //這裏必需要將對象角色的id、name轉換成ComboTree在頁面的顯示形式id、text  
  45.             //ComboTree,不是數據表格,沒有在頁面經過columns轉換數據的屬性  
  46.             map.put("id", list.get(i).getId());         //id  
  47.             map.put("text",list.get(i).getName());      //角色名  
  48.             map.put("children", createComboTreeChildren(list, role.getId()));  
  49.         }  
  50.         if (map != null)  
  51.             comboTreeList.add(map);  
  52.     }  
  53. }  
  54.   
  55.   
  56. /** 
  57.  * 遞歸設置role樹 
  58.  * @param list 
  59.  * @param fid 
  60.  * @return 
  61.  */  
  62. private List<Map<String, Object>> createComboTreeChildren(List<Role> list, String fid) {  
  63.     List<Map<String, Object>> childList = new ArrayList<Map<String, Object>>();  
  64.     for (int j = 0; j < list.size(); j++) {  
  65.         Map<String, Object> map = null;  
  66.         Role treeChild = (Role) list.get(j);  
  67.         if (treeChild.getFatherId().equals(fid)) {  
  68.             map = new HashMap<String, Object>();  
  69.             //這裏必需要將對象角色的id、name轉換成ComboTree在頁面的顯示形式id、text  
  70.             //ComboTree,不是數據表格,沒有在頁面經過columns轉換數據的屬性  
  71.             map.put("id", list.get(j).getId());  
  72.             map.put("text", list.get(j).getName());  
  73.             map.put("children", createComboTreeChildren(list, treeChild.getId()));  
  74.         }  
  75.           
  76.         if (map != null)  
  77.             childList.add(map);  
  78.     }  
  79.     return childList;  
  80. }  
  81.  
  82. 參考博客

http://x125858805.iteye.com/blog/2229087.net

相關文章
相關標籤/搜索