• 在jsp中使用jstl,不使用JS,实现递归,生成N级菜单


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

    我的实现:

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

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="com.leslie.SysMenu"%>
     4 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
     5 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
     6 <c:forEach var="parentMenu" items="${parentMenus}">
     7     <c:set var="key" value="${parentMenu.sysMenuId}${''}" scope="request"></c:set>
     8     <c:set var="sms" value='${subMenus[key]}' scope="request"></c:set>
     9     <%-- <c:out value="${fn:length(subMenus[key])}"/> --%>
    10     <c:choose>
    11         <c:when test='${not empty sms and fn:length(sms) > 0}'>
    12             <li><a class="MenuBarItemSubmenu" href="${parentMenu.url}" target="ff">${parentMenu.title}</a>
    13                 <ul>
    14                     <c:forEach var="sm" items="${sms}">
    15                         <c:set var="parentMenus" value="${sms}" scope="request" />
    16                         <c:import url="recursionMenu.jsp" />
    17                     </c:forEach>
    18                 </ul></li>
    19         </c:when>
    20         <c:otherwise>
    21             <li><a href="#" target="ff">${parentMenu.title}</a></li>
    22         </c:otherwise>
    23     </c:choose>
    24 </c:forEach>

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

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

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

    1 <div class="leftmenu">
    2  <ul id="MenuBar1" class="MenuBarVertical">
    3    <c:import url="recursionMenu.jsp" />
    4  </ul>
    5 </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不对取到了值,所以菜单会重复。
  • 相关阅读:
    动手动脑
    原码反码补码
    考试感想
    第八周
    第七周
    第六周
    第五周
    第四周
    Hamburger Magi(hdu 3182)
    Doing Homework(hdu)1074
  • 原文地址:https://www.cnblogs.com/mabaishui/p/5485158.html
Copyright © 2020-2023  润新知