在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不对取到了值,所以菜单会重复。
时间: 2024-07-30 20:43:36

在jsp中使用jstl,不使用JS,实现递归,生成N级菜单的相关文章

【JSP中引入文件】JSP中获取根路径+引用js文件

在jsp界面中经常需要引入js.css等文件,通常都需要先获取项目根路径,然后再引入文件. 例如: 项目路径如下,需要在index.jsp中引入FusionCharts相关的js.css等: index.jsp <%@ page language="java" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.get

JSP中获取jstl中的数据

我们在编程JSP时,有时会需要访问jstl中的数据,或者说是el表达式中的数据. 比如, <c:forEach    varStatus="data1" var="data" items="${alltemphotmeltdata}"> <tr> <td> ${data.hNo } </td> <td> ${data.hDate } </td> <td> ${da

JSP中利用JSTL标签对日期格式化

数据库:Mysql 开发语言:JAVA 页面类型:JSP 对Mysql中的日期类型格式化,在JSP中,如何办呢,很多人说在JAVA后台去日期格式化,无奈了,于是找到了比较靠谱的答案 需要先引入JSTL库 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 其次对JSP输出的日期进行格式化 <span>发布时间:<fmt:formatDate value=&qu

【转】JSP中的JSTL与EL表达式用法及区别

对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL表达式一起使用,来实现在jsp中不出现java代码段.所以我们先来学习EL表达式 EL主要用于查找作用域中的数据,然后对它们执行简单操作:它不是编程语言,甚至不是脚本编制语言.通常与 JSTL 标记一起作用,能用简单而又方便的符号来表示复杂的行为. EL基本格式 EL表达式的格式:用美元符号($)定

jsp中的JSTL与EL表达式用法

JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库.JSTL函数标签库.数据库标签库.I18N格式化标签库.XML标签库. JSTL的核心标签库主要包括:表达式操作.流程控制.迭代操作和URL操作.以下是JSTL常用标签的用法总结: 一.表达式操作 1.<c:out> 作用:用于显示数据的内容.语法1:没有本体内容 <c:out value="value" [escapeXml="{

关于jsp中使用jstl的问题

一般稍不小心就会出现下面的错误: the absolute uri:http://java.sun.com/jstl/core cannot be resolved.一个例子如:http://stackoverflow.com/questions/4928271/jstl-1-2-the-absolute-uri-http-java-sun-com-jstl-core-cannot-be-resolved 解决办法: 如果你的项目是使用Maven进行管理的话,那么很好办,只需要在pom.xml文

JSP中常用JSTL用法

使用标签时,需要在jsp文件头加入以下代码: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>可选:当需要对内容进行格式化时加入以下头样式文件<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>并且需要导入相对应的jar包,实例如下: 下面分别对这

jsp中把js变量赋给java变量,或者将java变量赋给js变量怎么做?

在jsp中经常会遇到把js变量赋给java变量,或者将java变量赋给js变量的情况,在此将通用的处理方法小结如下: java变量传给js好办,var a=”<%=javaParam%>“;注意要将引号”"加上: js变量给java稍微复杂点,一般是在表单中用一个的隐藏表单元素,然后在脚本中将js变量值赋给它: var jsParamValue=’aaaa’;form1.jsParam.value=jsParamValue; 然后就可以request.getPrameter(“jsP

jsp中获取不到servlet的cookie

今天做登陆,发现jsp中使用document.cookie获取不到servlet生成的cookie,我们可以在浏览器的cookie文件夹中发现,servlet中生成的cookie和jsp中的生成的路径不一样 (cookie查看:IE浏览器 --> 右上角设置 --> Internet选项 --> 常规浏览历史纪录设置 --> 查看文件) 这里的 Login/ 是jsp文件生成的:servlet/文件是servlet文件生成的,我们可以看到他们生成的cookie的文件路径的差异,这时