layui 生成动态左侧菜单 递归实现

我知道两种方式实现:

一、先加载所有的主菜单,之后通过点击主菜单在加载该菜单的子菜单(缺点,如果判断是否已经加载过,那么动态添加了菜单,这里显示不出来,不判断的话,每次点击都会请求一次,这样请求的次数就太多了,服务器不太好的话可能会成为高并发的一个原因)

二、就是以下的了,使用递归一次性全部加载出来(缺点,耗费服务器内存)

如果动态添加一个菜单,你当前页面不手动刷新菜单不会显示,这个问题可以考虑用websocket实现

 

首先是service层如何获取所有的菜单(主菜单和所有的子菜单)

    /**
    *获取所有菜单
    **/
    @Override
    public List getParentMeun() {
        //获取所有的菜单(包括子菜单和父级菜单)
        List list = meunDao.getParentMeun();
        //创建一个集合用于保存所有的主菜单
        List rootMeun=new ArrayList<>();
        //遍历所有菜单集合,如果是主菜单的话直接放入rootMeun集合
        for (MeunInfo info:list){
            //判断为0是因为我的主菜单标识是0
            if (info.getMeunParent()==0){
                rootMeun.add(info);
            }
        }
        

        //这个是遍历所有主菜单,分别获取所有主菜单的所有子菜单
        for (MeunInfo info:rootMeun){
            //获取所有子菜单 递归
            List childrenList=getchildrenMeun(info.getId(),list);
            //这个是实体类中的子菜单集合
            info.setChildrenList(childrenList);
        }
        return rootMeun;
    }

/**
*    递归获取子菜单(这个我也不太理解,copy过去就行)
**/
public List getchildrenMeun(int id,List allMeun){
        //用于保存子菜单
        List childrenList=new ArrayList<>();
        for (MeunInfo info: allMeun){
            //判断当前的菜单标识是否等于主菜单的id
            if(info.getMeunParent()==id){
                //如果是的话 就放入主菜单对象的子菜单集合
                childrenList.add(info);
            }
        }

        //这里就是递归了,遍历所有的子菜单
        for (MeunInfo info:childrenList){
            info.setChildrenList(getchildrenMeun(info.getId(),allMeun));
        }

        //如果子菜单为空的话,那就说明某菜单下没有子菜单了,直接返回空,子菜单为空的话就不会继续                
        //迭代了
        if(childrenList!=null && childrenList.size()==0){
            return null;
        }
        return  childrenList;
    }

接下来是实体类

    //菜单id
    private int id;
    //菜单标题
    private String meunTitle;
    //菜单地址
    private String meunUrl;
    //菜单状态
    private int meunStatus;
    //菜单标识
    private int meunParent;
    //菜单排序
    private int meunSort;
    //子菜单集合
    private List childrenList;

    //get set 省略

之后你可以测试,可以拿到结果,这个自行测试

 

界面代码(注意这里我是用的是layui)




    
    Title
    
    


    
    




这是我的第一篇博客,多谢大家的观看,希望能帮大家解决问题!!!

你可能感兴趣的:(功能模块)