EL——动态控制map的取值,实现动态呈现目录

实现对Map的Key的Key项动态读取
例 :

Map<Long, List<BookType>> map = ..........
map.put(0,list0);
map.put(1,list1);
map.put(2,list2);

前台静态读取并遍历:

<c:forEach items="${applicationScope.booktypes[0] }" var="type" varStatus="status" >
</c:forEach>

前台动态读取并遍历:

<c:set var="secKey" value="${type.id+0 }" />   //注意该处的+0不能省略。。。。
//另外 如果将+0改为+""是否可以将Key定义为string类型照常可以使用?鄙人暂时没有测试。。。。
<c:forEach items="${applicationScope.booktypes[secKey] }" var="secType" varStatus="secStatus" >
		<a class="contentBook">${secType.name }</a>
</c:forEach>

在这里我利用该方法,完成一个二级目录的存取,读取,显示

后台

//代码是ServletContext的初始化方法,在JSP中称之为application
@Override
	public void contextInitialized(ServletContextEvent event) {
		Map<Long, List<BookType>> map = new HashMap<Long, List<BookType>>();
		fillMap(0L, map);
		event.getServletContext().setAttribute("booktypes", map);;
	}
// 通过对数据库读取,将不同级别的目录名字存放在      (递归)
//Map<Long, List<BookType>> map = new HashMap<Long, List<BookType>>();
// 的map变量中
//由于递归的存在,所以 你可以实现任意长度的目录,但是一般3级目录应该够用了
/**
 * 通过map存储树状图的结构
 * @param pid
 * @return
 */
private static void fillMap(Long pid, Map<Long, List<BookType>> map) {
	// 获取数据库相关的数据
	List<BookType> booktypes = FactoryDao.getBookTypeDao().getListByPid(pid);
	// 判断数据库是否存在该数据
	if(null != booktypes && booktypes.size() > 0) {
		// 数据写入map
		map.put(pid, booktypes);
		for (BookType bookType : booktypes) {
			fillMap(Long.valueOf(bookType.getId()), map);
		}
	}
}

前台读取目录

//  静态读取  一级目录  特点是  pid = 0 的目录
<c:forEach items="${applicationScope.booktypes[0] }" var="type" varStatus="status" >
						<c:if test="${status.count <= 10}">
							<li>
								<div class="leftShow">
									<span class="bookType"><b>${type.name}</b></span>
//								动态读取 子目录: 子目录 当时存放为 map(pid, list<BookType>)   pid 为上级目录的 id  
当前需要取出id 去找子目录
									<c:set var="secKey" value="${type.id+0 }" />
									<c:forEach items="${applicationScope.booktypes[secKey] }" var="secType" varStatus="secStatus" >
										<c:if test="${secStatus.count <= 6}">
											<a class="contentBook">${secType.name }</a>
										</c:if>
									</c:forEach>	
								</div>
							</li>
						</c:if>
					</c:forEach>

在这里 只实现了两级目录, 如果要实现不定级目录,很可能要用到递归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值