从数据库动态加载菜单

思路:将菜单图片、URL、名称等信息存放在数据库,从数据库动态加载菜单到页面上

一、数据库设计

系统菜单表

columntypecomment
idint菜单编号
menu_namevarchar一级菜单名
menu_numvarchar所属的一级菜单编号
picturevarchar菜单图片
urlvarchar菜单链接
is_useint是否使用
sortint排序

二、Controller层获取数据

    /**
     * 加载菜单
     */
    @RequestMapping("/getMenu")
    public String getMenu(HttpSession session, HttpServletResponse response, HttpServletRequest request)
            throws IOException {
            // 查询一级菜单
            List<Menu> selectMenu = menuService.selectMenu();
            // 存放菜单列表
            List<Menu> menus = new ArrayList<Menu>();

            for (Menu menu : selectMenu) {
                Menu menu = new MenuParam();
                menu.setId(menu.getId());
                menu.setMenuName(menu.getMenuName());
                menu.setMenuNum(menu.getMenuNum());
                menu.setPicture(menu.getPicture());
                menu.setUrl(menu.getUrl());
                Integer sort = menu.getSort();
                if (sort == 1) {
                    menu.setIsOpen(true);
                }
                // 根据一级菜单编号查询二级菜单个数
                int secondMenuCnt = menuService.selectMenuCount(menu.getId());
                // 存储二级菜单
                List<Menu> secondList = new ArrayList<Menu>();
                if (secondMenuCnt > 0) {
                    // 存在二级菜单,根据一级菜单编号查询二级菜单详情
                    List<Menu> secondMenu = menuService.selectMenuByStair(map);
                    for (Menu menu2 : secondMenu) {
                        MenuParam second = new MenuParam();
                        second.setId(menu2.getId());
                        second.setMenuName(menu2.getMenuName());
                                second.setSecondMenuNum(menu2.getStairMenuNum());
                        second.setMenuPic(menu2.getMenuPic());
                        second.setMenuUrl(menu2.getMenuUrl());
                        Integer secondSort = menu2.getMenuSort();
                        if (secondSort == 1) {
                            second.setIsCurrent(true);
                        }
                        secondList.add(second);
                    }
                }
                menuParam.setSecondMenuList(secondList);
                menus.add(menuParam);
            }
            JSONObject json = new JSONObject();
            json.put("secondList", menus);
            String menuData = json.toString();
            session.setAttribute("menus", menuData);
            return "index";
        }
    }

三、jsp页面

<div id="menu" style="display: none;">${menus}</div>
<div id="body">
        <!-- 存放菜单导航栏的div -->    
        <div class="panel">
            <ul class="panel-body">

            </ul>
        </div>
        <!-- 点击左侧菜单加载页面 -->     
        <div id="main">
            <div id="mainBody">

            </div>
        </div>
    </div>
    <script src="<%=request.getContextPath()%>/js/menu.js"></script>

四、js动态加载菜单列表

新建一个menu.js文件,使用JS脚本渲染菜单


var list = $("#menu").html();
var menu = eval( "(" + list + ")" );
var length = menu.secondList.length;
for (var j = 0; j<length;j++) {
    $(".panel-body").append("<li><a href='#'  class='item'><span class='iconLeft'><img src='"+menu.secondList[j].picture+"' style='margin-right:10px;margin-top:-4px'></span>"+menu.secondList[j].menuName+"<span class='iconRight normal' ></span></a><dl class='child' id='"+menu.secondList[j].id+"'>"+
                    "</dl></li> ")

    var menu2=menu.secondList[j].setSecondMenuList;
    $("#"+menu.secondList[j].id+"").html("");
    for(var i = 0; i < menu2.length; i++){
        $("#"+menu.secondList[j].id+"").append('<dd><a href="#" data-href="'+menu2[i].url+'">'+menu2[i].menuName+'</a></dd>');
    }

}

五、效果图
这里写图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值