参考材料:  http://blog.csdn.net/kimsoft/article/details/7801564

我的实现:

1、我的recursionMenu.jsp代码如下:

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.leslie.SysMenu"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<c:forEach var="parentMenu" items="${parentMenus}">
<c:set var="key" value="${parentMenu.sysMenuId}${''}" scope="request"></c:set>
<c:set var="sms" value='${subMenus[key]}' scope="request"></c:set>
<%-- <c:out value="${fn:length(subMenus[key])}"/> --%>
<c:choose>
<c:when test='${not empty sms and fn:length(sms) > 0}'>
<li><a class="MenuBarItemSubmenu" href="${parentMenu.url}" target="ff">${parentMenu.title}</a>
<ul>
<c:forEach var="sm" items="${sms}">
<c:set var="parentMenus" value="${sms}" scope="request" />
<c:import url="recursionMenu.jsp" />
</c:forEach>
</ul></li>
</c:when>
<c:otherwise>
<li><a href="#" target="ff">${parentMenu.title}</a></li>
</c:otherwise>
</c:choose>
</c:forEach>

2、页面说明:${parentMenus}是后台返回的一个List,存储着父一级的菜单对象。${subMenus}是后台返回的一个Map,key是菜单的id,value是该菜单的直属子菜单对象组成的List,这个Map将所有当前用户拥有权限的菜单

都组织好了,可见它存储着多个层级菜单的内容。

3、外层调用recursionMenu.jsp的页面的代码节选

 <div class="leftmenu">
2  <ul id="MenuBar1" class="MenuBarVertical">
3    <c:import url="recursionMenu.jsp" />
4  </ul>
</div>

4、关键点:

(1)如何实现递归:jsp使用<c:import>标签,自己import自己,来实现递归。

(2)

<c:set var="key" value="${parentMenu.sysMenuId}${''}" scope="request"></c:set>
<c:set var="sms" value='${subMenus[key]}' scope="request"></c:set> 这两行的变量定义语句中,如果将scope="request"这一句去掉的话,生成的二级菜单会出现重复,因为如果变量的定义范围超出了request的话,key和sms就会混乱,造成本应该从${subMenus}中应该取不到值,
却因为key不对取到了值,所以菜单会重复。

最新文章

  1. 2016 Multi-University Training Contest 3
  2. paper 131:【图像算法】图像特征:GLCM【转载】
  3. const 和 readonly 修饰符的用法
  4. Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建
  5. 自己动手做Web框架—MVC+Front Controller
  6. 好老板VS坏老板
  7. spring所需包下载
  8. 模块shimgvw.dll已加载,但找不到入口点DllRegisterServer
  9. 项目解析- JspLibrary - part3
  10. TFS客户端登录用户修改
  11. C#获取当前路径的方法
  12. Hibernate-Native SQL
  13. UVA 11426 GCD Extrme (Ⅲ)
  14. 用ThreadLocal管理事务
  15. 原生app,WEBAPP,混合app
  16. 如何彻底解决jsp页面中文乱码及数据库乱码
  17. vlan trunk vtp端口聚合
  18. 省市便利 UIPicherView
  19. PHP 领域逻辑与数据库映射
  20. QuietHit小Game

热门文章

  1. webbrowser取页面验证码
  2. Hbase 学习(十一)使用hive往hbase当中导入数据
  3. Codeforces Round #256 (Div. 2) B (448B) Suffix Structures
  4. jsp标准动作
  5. android开发(34) 自定义 listView的分割线( 使用xml drawable画多条线)
  6. Python - 连接msql数据库
  7. PCL点云曲面重建(1)
  8. IDEA初始化配置
  9. https://github.com/cobolfoo/gdx-skineditor
  10. SAP 以工序为基准进行发料 机加工行业 Goods Issue to Routing