jsp許可權菜單綁定的基本實現
- 2019 年 10 月 30 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/luo4105/article/details/51912114
實現一個基本的用戶,角色,菜單綁定的基本需求數據建模.先看er圖,人員和用戶,部門兩張表綁定關聯關係,同時用戶和角色許可權進行綁定,許可權表和菜單進行綁定,這樣,就可以得到該用戶綁定的菜單,在菜單表中,父菜單id這一項關聯有上一級菜單的菜單id,這樣去體現菜單之間的關聯關係,同時菜單表中的訪問地址URL存放菜單對應的頁面的url

在登錄的時候,查詢出該用戶的菜單列表,並按樹形結構排列起來,放入session中,這樣,前台就能獲得綁定的菜單數據,並根據菜單數據去顯示菜單
其中將菜單列錶轉化為樹形結構的數據的程式碼如下
List<TSysMenu> menuList = tSysMenuAdminService.getAllTSysMenuAdmin(null);//獲得所有菜單 List<TSysMenu> topMenuList = l.getMenuList(menuList); request.getSession(true).setAttribute("menuList", topMenuList); public List<TSysMenu> getMenuList(List<TSysMenu> menuList) { List<TSysMenu> result = new ArrayList<TSysMenu>(); for(int i = menuList.size() - 1; i >= 0; i--){ if(menuList.get(i).getMenuParentId() == 1){ TSysMenu menu = menuList.get(i); result.add(menuList.get(i)); menuList.remove(i); nodeRecursion(menu,menuList); } } //二級菜單 return result; } /** * 初始化需要用的遞歸方法 * @param node 數的結點 * @param tList */ public void nodeRecursion(TSysMenu node, List<TSysMenu> tList){ List<TSysMenu> tsysMenuList = new ArrayList<TSysMenu>(); node.setChildren(tsysMenuList); for(int i=0;i<tList.size();i++){ if(tList.get(i) != null && tList.get(i).getMenuParentId().equals(node.getMenuId())){ TSysMenu node1=tList.get(i); tsysMenuList.add(node1); //tList.remove(i); //i--; nodeRecursion(node1,tList); } } }前台的顯示處理
前台jsp使用了三個iframe去處理,分為top,left,main,其中top放一級菜單,left放分支菜單,main中為菜單要跳轉的頁面
top菜單的生成用el表達式的foreach生成,left的菜單有jq去動態拼接html語句,在top菜單點擊的同時去在left菜單頁面動態去插入拼接好的html語句
程式碼如下
<!-- 一級菜單 --> <div class="headernav"> <div class="navchildmenu"> <ul id="menuList"> <c:forEach items="${menuList}" var="topMenu" varStatus="st"> <li tag="landMenu${st.index }"><a target='MainMenu' href="<c:choose><c:when test="${empty topMenu.menuHref}">javascript:void(0);</c:when><c:otherwise>${ctx }${topMenu.menuHref}</c:otherwise></c:choose>" οnfοcus="this.blur();">${topMenu.menuName}</a></li> </c:forEach> </ul> </div> </div> <!-- 左側二級菜單 --> <div class="box3"> <c:forEach items="${menuList}" var="topMenu" varStatus="st"> <c:forEach items="${topMenu.children}" var="landMenu" varStatus="st2"> <div id="landMenu${st.index }_leftMenu${st2.index}" style="display: none;"> <dl> <dd> <div class="title"> <a href="<c:choose><c:when test="${empty landMenu.menuHref}">javascript:void(0);</c:when><c:otherwise>${ctx }${landMenu.menuHref}</c:otherwise></c:choose>" target="MainMenu"> <span><img src="${ctx}/static/images/system/leftico01.png" /></span>${landMenu.menuName} </a> </div> </dd> </dl> </div> </c:forEach> </c:forEach> </div>jq控制程式碼
$(".headernav div").show(); $("#menuList li").click(function() { var id = $(this).attr("tag"); var html = ""; $('div[id^='+id+']').each(function(){ //以id開始說有的元素 html+=$(this).html(); }); parent.LeftMenu.navMain.innerHTML = ""; parent.LeftMenu.navMain.innerHTML = html; parent.LeftMenu.menuClick(); }); //登錄成功後的默認顯示首頁 var tag_first=$("#menuList li a")[0]; tag_first.click();