在jsp中使用jstl,不使用JS,实现递归,生成N级菜单
参考材料: 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不对取到了值,所以菜单会重复。
在jsp中使用jstl,不使用JS,实现递归,生成N级菜单的更多相关文章
- 【JSP中引入文件】JSP中获取根路径+引用js文件
在jsp界面中经常需要引入js.css等文件,通常都需要先获取项目根路径,然后再引入文件. 例如: 项目路径如下,需要在index.jsp中引入FusionCharts相关的js.css等: inde ...
- JSP中获取jstl中的数据
我们在编程JSP时,有时会须要訪问jstl中的数据,或者说是el表达式中的数据. 比方, <c:forEach varStatus="data1" var=" ...
- 【转】JSP中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...
- jsp中的JSTL与EL表达式用法
JSTL (JSP Standard Tag Library ,JSP标准标签库) JSTL标签库分为5类:JSTL核心标签库.JSTL函数标签库.数据库标签库.I18N格式化标签库.XML标签库. ...
- jsp中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念 JSTL一般要配合E ...
- JSP中利用JSTL标签对日期格式化
数据库:Mysql 开发语言:JAVA 页面类型:JSP 对Mysql中的日期类型格式化,在JSP中,如何办呢,很多人说在JAVA后台去日期格式化,无奈了,于是找到了比较靠谱的答案 需要先引入JSTL ...
- JSP中使用JSTL表达式
最近写web项目,为了使JSP代码美观好维护,决定采用EL&JSTL表达式. EL表达式直接就可以用,但是JSTL表达式是属于apache的一个开源库,这个用起来就需要倒入一些jar包之 ...
- JSP中常用JSTL用法
使用标签时,需要在jsp文件头加入以下代码: <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/cor ...
- js利用递归生成随机数填充到数组
用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值 var array = new Array(5); function addNumToArray(array,num){ i ...
随机推荐
- The Swift.org Blog welcome欢迎页note
The Swift.org Blog Welcomehtml, body {overflow-x: initial !important;}html { font-size: 14px; } body ...
- SQL复制表操作
select * into tb1 from tb2 insert into tb1 (fld1, fld2) select fld1, 0 from tb2 where fld0='x' 以上两句 ...
- LVS的优点和缺点
LVS的优点是:1.抗负载能力强.是工作在网络4层之上仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低.2.配置性比较低,这是一个缺点也是一个 ...
- c# 利用反射清除事件
控件的事件清除,除了-=,就只能依靠反射来执行了. /// <summary> /// 清除一个对象的某个事件所挂钩的delegate /// </summary> /// & ...
- android开发(33) 让 actionbar 透明2
让 actionbar 的背景 透明 我需要一个 透明的actionbar ,找到如下方法实现: 1. 首先,设置ActionBar 浮动到主界面上来. 2. 然后,设置ActionBar的背景色,透 ...
- 云服务器启动tomcat巨慢,很慢
增加随机数生成熵池 0.查看熵池 cat /proc/sys/kernel/random/entropy_avail 1. yum install rng-tools 2. systemctl sta ...
- html5与css3学习实践--基础的内容划分标签
从位置上划分出网页的区域以后,就需要用到网页的内容标签了,比如<article>.<aside>.<nav>.<p>.<h1>等.网页中,这 ...
- resin4.0.23+nginx1.1集群
一,web服务器小论 以前的公司使用的web服务器是tomcat(tomcat+apache作集群),现在的公司是一家互联网公司,采用的架构是resin+nginx作集群(resin比tomcat快? ...
- python-s and s.strip()
s and s.strip()“ 这个表达式的值.Python语法是这么运行的: 如果s is None,那么s会被判断为False.而False不管和什么做and,结果都是False,所以不需要看a ...
- Spring Boot 启用Gzip压缩
有两点需要注意 1.需要在application.properties里启用压缩,并设置压缩支持的格式(默认支持text/html等,但不支持application/json) server.comp ...