JAva実装無限レベルツリーメニューの構築

4142 ワード

前の文章のピットに引き続き記入して、ここでバックグラウンドjavaがどのようにマルチフォークツリーを構築するかを話して、このようにフロントはデータの再帰構造ツリーメニューを受信することができます.
マルチフォークツリーを構築する論理をどのように実現するかを整理しましょう.実は全体の問題は1、ノードを格納するためのエンティティクラスを構築することであるので、私たちが構築するには4つのオブジェクト(id,pid,name,chirenList)2、構築メニュー構造3、構築サブメニューが必要であり、このようにループしてpidによって上位メニューを判断します
具体的には、1、ここではTreeを構成する.JAvaエンティティクラス
package com.tcl.jr.crm.entity;

/**
 *    :Tree
 *    :    
 */
public class Tree {

    private String id;
    private String pId;
    private String name;
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getpId() {
        return pId;
    }

    public void setpId(String pId) {
        this.pId = pId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Tree [id=" + id + ", pId=" + pId + ", name=" + name + "]";
    }

}

2、木の構造類を包装して、ここで私は1つの通用するツール類に包装して、プロジェクトの中で使用することを便利にして、MenuTreeUtil.JAva、完全なコードは以下の通りで、直接コピーして使用できます.
package com.tcl.jr.crm.util;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.tcl.jr.crm.entity.Tree;

/**
 *    :MenuTreeUtil
 *    :        
 */
public class MenuTreeUtil {
    
    public static Map mapArray = new LinkedHashMap();  
    public List menuCommon;  
    public List list = new ArrayList();  
      
    public List menuList(List menu){      
        this.menuCommon = menu;  
        for (Tree x : menu) {     
            Map mapArr = new LinkedHashMap();  
            if(x.getpId()=="0"){  
                mapArr.put("id", x.getId());  
                mapArr.put("name", x.getName());    
                mapArr.put("pid", x.getpId());    
                mapArr.put("childList", menuChild(x.getId()));    
                list.add(mapArr);  
            }  
        }     
        return list;  
    }  
   
    public List> menuChild(String id){  
        List lists = new ArrayList();  
        for(Tree a:menuCommon){  
            Map childArray = new LinkedHashMap();  
            if(a.getpId() == id){  
                childArray.put("id", a.getId());  
                childArray.put("name", a.getName());  
                childArray.put("pid", a.getpId());  
                childArray.put("childList", menuChild(a.getId()));
                lists.add(childArray);  
            }  
        }  
        return lists; 
    }  

}

3、最後にコンソール要求方法でデータを呼び出せばいい.コントロールの方法は以下の通りである.
/**
     *   APP    
     */
    @RequestMapping(value = { "getAPPTree" }, produces = "text/html;charset=UTF-8")
    @ResponseBody
    public String getAPPTree(HttpServletRequest request, HttpServletResponse response) throws Exception {
        Map returnmap = new HashMap<>();
        MenuTreeUtil menuTree = new MenuTreeUtil();
        PageData pd = this.getPageData();
        try {
            //                          ,       ,    
            List list = dataDicService.buildTree(pd.getString("instType"));
            List menuList = menuTree.menuList(list);
            //   web ,  APP list    json  ,   list    ,  json    vuejs        
            returnmap.put("list", menuList);
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return JsonMapper.toJsonString(returnmap);
    }

4、それからフロントajaxは第3部のインタフェースの方法を呼び出して必要なデータを要求して、どのように良いフロントのページにレンダリングして、私の別の文章を参照します:vuejsは再帰コンポーネントを使って木のディレクトリを実現します
JAva構造ツリーメニューデータはここまでですが、皆さんに役に立つことを願っています.私の共有は一般的に非常に詳細で、プロジェクトのプライバシー以外は、皆さんに残されませんよ.