根据不同管理员身份加载并显示当前管理员可以操作的菜单。
先查询出当前管理员的一级菜单,再根据管理员一级菜单的ID查询出当前一级菜单所拥有的的二级菜单。
1.zhangsan用户业务员身份
2.admin用户,超级管理员身份
3.lisi普通管理员身份
数据库展示
核心代码展示
MenuDAO类
package com.it.dao;
import com.it.entity.Menu1;
import com.it.entity.Menu2;
import com.it.untils.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Array;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
//实现菜单的查询
public class MenuDAO {
public List<Menu1> selectFirstLevelMenusById(String mgrId) throws SQLException {
List<Menu1> menu1List = new ArrayList<>();
String str="SELECT c.menu_id menuId,menu_code menuCode,menu_name menuName,menu_order menuOrder,menu_level menuLevel,menu_icon menuIcon FROM tb_mgr_role a " +
"INNER JOIN tb_role_menu b INNER JOIN tb_menus c ON a.role_id=b.role_id AND b.menu_id=c.menu_id WHERE a.mgr_id=? AND menu_level=1 ORDER BY c.menu_order";
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
menu1List= queryRunner.query(str, new BeanListHandler<Menu1>(Menu1.class), mgrId);
return menu1List;
}
public List<Menu2> selectSecondLevelMenusByIdAndParentCode(String mgrId,String parentCode) throws SQLException {
List<Menu2> menu2List = new ArrayList<>();
String sql="SELECT c.menu_id menuId,menu_code menuCode,menu_name menuName,menu_order menuOrder,menu_level menuLevel,parent_menu_code parentMenuCode,menu_url menuUrl FROM tb_mgr_role a " +
"INNER JOIN tb_role_menu b INNER JOIN tb_menus c ON a.role_id=b.role_id AND b.menu_id=c.menu_id WHERE a.mgr_id=? AND menu_level=2 AND parent_menu_code=? ORDER BY c.menu_order";
QueryRunner queryRunner = new QueryRunner(DruidUtils.getDataSource());
menu2List=queryRunner.query(sql,new BeanListHandler<Menu2>(Menu2.class),mgrId,parentCode);
return menu2List;
}
}
MenuService类
package com.it.service;
import com.it.dao.MenuDAO;
import com.it.entity.Menu1;
import com.it.entity.Menu2;
import java.sql.SQLException;
import java.util.List;
public class MenuService {
public List<Menu1> selectMenuByMgrId(String mgrId) throws SQLException {
MenuDAO menuDAO = new MenuDAO();
//根据管理员ID查询该管理员的一级菜单
List<Menu1> menu1List = menuDAO.selectFirstLevelMenusById(mgrId);
//查询每一个一级菜单中的二级菜单
for (int i = 0; i < menu1List.size(); i++) {
Menu1 menu1 = menu1List.get(i);
List<Menu2> menu2s = menuDAO.selectSecondLevelMenusByIdAndParentCode(mgrId, menu1.getMenuCode());
menu1.setChildMenus(menu2s);
}
return menu1List;
}
}
IndexServlet类
package com.it.servlets;
import com.it.entity.Manager;
import com.it.entity.Menu1;
import com.it.service.MenuService;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
@WebServlet("/IndexServlet")
public class IndexServlet extends HttpServlet {
MenuService menuService=new MenuService();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
Manager mgr = (Manager) session.getAttribute("mgr");
String mgrId = mgr.getMgrId();
try {
List<Menu1> menu1List = menuService.selectMenuByMgrId(mgrId);
req.setAttribute("menuList",menu1List);
req.getRequestDispatcher("index.jsp").forward(req,resp);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
首先在项目添加jstl的jar包,JSP页面导入该jar包内容
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- 菜单2 -->
<c:forEach items="${menuList}" var="menu1">
<li>
<a href="#" class="dropdown-toggle">
<i class="${menu1.menuIcon}"></i>
<span class="menu-text"> ${menu1.menuName} </span>
<b class="arrow icon-angle-down"></b>
</a>
<ul class="submenu">
<c:forEach items="${menu1.childMenus}" var="menu2"></c:forEach>
<li class="home">
<a href="javascript:void(0)" name="${menu2.menuUrl}" title="${menu2.menuName}" class="iframeurl">
<i class="icon-double-angle-right"></i>${menu2.menuName}
</a>
</li>
</ul>
</li>
</c:forEach>