LayUI之树形菜单的实现(详细描述附带项目案例)

目录

前言

1. 了解LayUI官网提供的菜单模版

1.1 jsp页面代码

页面展示效

2.用LayUI实现树形菜单

2.1 引入LayUI的依赖和样式文件。

2.2 编写树形菜单对象的实体类

Permission类

2.3 编写Dao方法类

PermissionDao类

调用list()方法后将结果进行json解析工具解析结果如下

 调用menus()方法后将结果进行json解析工具解析结果如下

 2.4  树形菜单工具类

2.5 PermissionAction类

2.6 配置web.xml文件

2.7 jsp页面代码

页面展示效果

 2.8 注意事项

结束语


前言

树形菜单是一种常见的网页导航菜单形式,它使用树形结构来展示菜单项之间的层级关系。

树形结构是一种层次化的数据结构,它由一个或多个节点组成,每个节点可以有零个或多个子节点。在树形菜单中,每个菜单项都对应树中的一个节点,菜单项之间通过父子关系来表示层级关系。

树形菜单通常以一个根节点开始,根节点的子节点对应一级菜单项,每个一级菜单项又可以有自己的子节点,形成多级菜单结构。用户可以通过点击菜单项的展开/折叠按钮或者点击菜单项本身来展开或收起下级菜单项。

树形菜单通常用于展示复杂的导航结构,特别适用于有多层次菜单结构的场景,如文件目录浏览、组织架构展示等。它可以提供清晰的层级关系,让用户方便地浏览和选择所需的菜单项。

请跟着思维导图我一起来看一看吧。

LayUI之树形菜单的实现(详细描述附带项目案例)_第1张图片

 LayUI之树形菜单的实现(详细描述附带项目案例)_第2张图片

1. 了解LayUI官网提供的菜单模版

1.1 jsp页面代码




  
  Layui
  
  
  
  
  


以下为「基础菜单」的静态展示,更多操作可见:下拉菜单组件
   
   
   
     
           
  •          
    menu item 1
           
  •        
  •          
               menu item 2          
           
  •        
  •        
  •          
              menu group          
             
                 
    •              
      menu item 3-1
                 
    •            
    •              
      menu group 2
                   
                       
      •                  
        menu item 3-2-1
                       
      •                
      • menu item 3-2-2
      •              
                 
    •            
    • menu item 3-3
    •          
           
  •        
  •        
  • menu item 4 1
  •        
  • menu item 5
  •        
  • menu item 6
  •        
  •          
              menu item 7 Children                      
             
               
                   
    •                
                      menu item 7-1                                  
                     
                       
                           
      • menu item 7-2-1
      •                    
      • menu item 7-2-2
      •                    
      • menu item 7-2-3
      •                    
      • menu item 7-2-4
      •                  
                     
                   
    •              
    • menu item 7-2
    •              
    • menu item 7-3
    •            
             
           
  •        
  • menu item 8
  •        
  •        
  •          
    menu group 9
             
                 
    • menu item 9-1
    •            
    •              
                    menu item 9-2                              
                   
                     
                         
      • menu item 9-2-1
      •                  
      • menu item 9-2-2
      •                  
      • menu item 9-2-3
      •                
                   
                 
    •            
    • menu item 9-31
    •          
           
  •        
  •        
  • menu item 10
  •      
   
 
 
   
     
           
  •          
    menu item 1
           
  •        
  •          
               menu item 2          
           
  •        
  •        
  •          
              menu group          
             
                 
    • menu item 3-1
    •            
    •              
      menu item 3-2
                 
    •          
           
  •        
  •        
  •          
    menu group 2
             
                 
    • menu item 4-1
    •            
    •              
      menu item 4-2
                 
    •          
           
  •        
  •        
  •          
              menu item 5                      
             
               
                   
    •                
      menu item 5-1
                   
    •              
    •                
      menu item 5-2
                   
    •            
             
           
  •        
  •          
    menu item 6
           
  •      
   
 
                         

页面展示效

LayUI之树形菜单的实现(详细描述附带项目案例)_第3张图片

2.用LayUI实现树形菜单

2.1 引入LayUI的依赖和样式文件。

2.2 编写树形菜单对象的实体类

Permission类

package com.YX.entity;
​
/**树形菜单对应的实体类
 * @author 君易--鑨
 * 2023年7月11日下午7:35:25
 * 
 */
public class Permission {
//定义属性
    private long id;
    private String name;
    private String description;
    private String url;
    private long pid;
    private int ismenu;//控制当前系统的权限是菜单还是按钮
    private long displayno;//菜单排序字段
    
    /**
     * 无参构造
     */
    public Permission() {
        // TODO Auto-generated constructor stub
    }
​
    public long getId() {
        return id;
    }
​
    public void setId(long id) {
        this.id = id;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getDescription() {
        return description;
    }
​
    public void setDescription(String description) {
        this.description = description;
    }
​
    public String getUrl() {
        return url;
    }
​
    public void setUrl(String url) {
        this.url = url;
    }
​
    public long getPid() {
        return pid;
    }
​
    public void setPid(long pid) {
        this.pid = pid;
    }
​
    public int getIsmenu() {
        return ismenu;
    }
​
    public void setIsmenu(int ismenu) {
        this.ismenu = ismenu;
    }
​
    public long getDisplayno() {
        return displayno;
    }
​
    public void setDisplayno(long displayno) {
        this.displayno = displayno;
    }
​
    @Override
    public String toString() {
        return "Permission [id=" + id + ", name=" + name + ", description=" + description + ", url=" + url + ", pid="
                + pid + ", ismenu=" + ismenu + ", displayno=" + displayno + "]";
    }
​
    /**
     * 有参构造
     * @param id
     * @param name
     * @param description
     * @param url
     * @param pid
     * @param ismenu
     * @param displayno
     */
    public Permission(long id, String name, String description, String url, long pid, int ismenu, long displayno) {
        super();
        this.id = id;
        this.name = name;
        this.description = description;
        this.url = url;
        this.pid = pid;
        this.ismenu = ismenu;
        this.displayno = displayno;
    }
   
    
}
 
  

2.3 编写Dao方法类

PermissionDao类

package com.YX.dao;

import java.util.ArrayList;
import java.util.List;

import com.YX.entity.Permission;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zking.util.BaseDao;
import com.zking.util.BuildTree;
import com.zking.util.PageBean;
import com.zking.util.TreeVo;

/**
 * Dao方法类
 * 
 * @author 君易--鑨 2023年7月11日下午8:01:00
 * 
 */
public class PermissionDao extends BaseDao {

	/**
	 * 获取树形菜单选项
	 * 
	 * @param permission
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List list(Permission permission, PageBean pageBean) throws Exception {
		String sql = "select * from t_oa_permission";
		return super.executeQuery(sql, Permission.class, pageBean);
	}

	// 将数据库中查询出的平级数据,转换成有父子关系的数据

	/**
	 * 有父子关系结果的方法
	 * 
	 * @param permission
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List> menus(Permission permission, PageBean pageBean) throws Exception {
		// 实例化一个有父子关系的集合
		List> lst = new ArrayList>();
		// 重新调用方法获取选项集合
		List list = this.list(permission, pageBean);
		// 遍历
		for (Permission p : list) {
			// 实例化树形菜单工具类
			TreeVo vo = new TreeVo<>();
			// 设置属性
			vo.setId(p.getId() + "");
			vo.setText(p.getName());
			vo.setParentId(p.getPid() + "");
			lst.add(vo);
		}
		return BuildTree.buildList(lst, "-1");
	}

	// 测试
	public static void main(String[] args) {
		PermissionDao pd = new PermissionDao();
		try {
			List> list = pd.menus(null, null);
			ObjectMapper om = new ObjectMapper();
			System.out.println(om.writeValueAsString(list));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
调用list()方法后将结果进行json解析工具解析结果如下

LayUI之树形菜单的实现(详细描述附带项目案例)_第4张图片

 调用menus()方法后将结果进行json解析工具解析结果如下

LayUI之树形菜单的实现(详细描述附带项目案例)_第5张图片

 2.4  树形菜单工具类

package com.zking.util;

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


/**树形菜单工具类
 * @author 君易--鑨
 * 2023年7月11日下午8:41:05
 * @param 
 * 
 */
public class TreeVo {
	/**
	 * 节点ID
	 */
	private String id;
	/**
	 * 显示节点文本
	 */
	private String text;
	/**
	 * 节点状态,open closed
	 */
	private Map state;
	/**
	 * 节点是否被选中 true false
	 */
	private boolean checked = false;
	/**
	 * 节点属性
	 */
	private Map attributes;

	/**
	 * 节点的子节点
	 */
	private List> children = new ArrayList>();

	/**
	 * 父ID
	 */
	private String parentId;
	/**
	 * 是否有父节点
	 */
	private boolean hasParent = false;
	/**
	 * 是否有子节点
	 */
	private boolean hasChildren = false;

	public String getId() {
		return id;
	}

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

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public Map getState() {
		return state;
	}

	public void setState(Map state) {
		this.state = state;
	}

	public boolean isChecked() {
		return checked;
	}

	public void setChecked(boolean checked) {
		this.checked = checked;
	}

	public Map getAttributes() {
		return attributes;
	}

	public void setAttributes(Map attributes) {
		this.attributes = attributes;
	}

	public List> getChildren() {
		return children;
	}

	public void setChildren(List> children) {
		this.children = children;
	}

	public boolean isHasParent() {
		return hasParent;
	}

	public void setHasParent(boolean isParent) {
		this.hasParent = isParent;
	}

	public boolean isHasChildren() {
		return hasChildren;
	}

	public void setChildren(boolean isChildren) {
		this.hasChildren = isChildren;
	}

	public String getParentId() {
		return parentId;
	}

	public void setParentId(String parentId) {
		this.parentId = parentId;
	}

	public TreeVo(String id, String text, Map state, boolean checked, Map attributes,
                  List> children, boolean isParent, boolean isChildren, String parentID) {
		super();
		this.id = id;
		this.text = text;
		this.state = state;
		this.checked = checked;
		this.attributes = attributes;
		this.children = children;
		this.hasParent = isParent;
		this.hasChildren = isChildren;
		this.parentId = parentID;
	}

	public TreeVo() {
		super();
	}

}

2.5 PermissionAction类

package com.YX.web;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.YX.dao.PermissionDao;
import com.YX.entity.Permission;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.ResponseUtil;
import com.zking.util.TreeVo;

/**树形菜单子控制器类
 * @author 君易--鑨
 * 2023年7月11日下午8:44:42
 * 
 */
public class PermissionAction extends ActionSupport implements ModelDriver {
//实例化实体对象和dao方法
	private Permission permission=new Permission();
	private PermissionDao  permissionDao=new PermissionDao();
	
	
	   public void menus(HttpServletRequest req, HttpServletResponse resp) {
		//			调用含有父子关系的方法
		   try {
			List> menus = permissionDao.menus(null, null);
//			回显客户端
			ResponseUtil.writeJson(resp, menus);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
	
	
	
	
	@Override
	public Permission getModel() {
		// TODO Auto-generated method stub
		return permission;
	}

	
}

2.6 配置web.xml文件



	
		
		
		
	


	
	
	
	

2.7 jsp页面代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%@ include file="common/header.jsp"%>




后台主界面





页面展示效果

LayUI之树形菜单的实现(详细描述附带项目案例)_第6张图片

 2.8 注意事项

  • 记得打上渲染树形菜单那行代码,否则会出现下面这种现象。

LayUI之树形菜单的实现(详细描述附带项目案例)_第7张图片

  •  创建编写了PermissionAction记得配置web.xml文件,否则无法运行项目

  •  PermissionAction类编写注意点

LayUI之树形菜单的实现(详细描述附带项目案例)_第8张图片

结束语

本期博客知识点分享就到这里了,小伙伴可关注我,后期会分享更多知识点与大家一起进步,诸君山顶见!

感谢各位大佬的肯定

LayUI之树形菜单的实现(详细描述附带项目案例)_第9张图片

 

你可能感兴趣的:(LayUi,树形菜单,layui,前端,javascript)