论坛首页 Java企业应用论坛

jstl递归生成树

浏览 8075 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-15  
需要两个jsp页面,一个是你要显示树的jsp页面tree.jsp,一个是递归构造树的页面recursive.jsp
显示树的jsp页面,tree.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<div style=" float:left; display:block; margin:10px; overflow:auto; width:200px; height:300px; border:solid 1px #CCC; line-height:21px; background:#FFF;">
<ul class="tree">
<%@include file="recursive.jsp"%>
</ul>
</div>

递归构造树的页面recursive.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
       <li>
              <a href="main.html" target="navTab" rel="main">${menu.name}</a>
              <c:if test="${not empty menu.children}">
                     <ul>
                        <c:forEach var="menu" items="${menu.children}">
                            <c:set var="menu" value="${menu}" scope="request"/>
                        <jsp:include page="recursive.jsp"/>
                        </c:forEach>            
                     </ul>
              </c:if>
       </li>

菜单Model,简单的一个Bean,树状结构的数据模型
     public class MenuItem{
              private String name;
              private String url;
              private List<MenuItem> children = new ArrayList<MenuItem>();
              public MenuItem(String name,String url){
                     this.name = name;
                     this.url = url;
              }
              public void addChildMenu(MenuItem menu){
                     this.children.add(menu);
              }
              .......
       }

构造模拟数据
              MenuItem menu31 = new MenuItem("三级菜单1", "url31");
              MenuItem menu32 = new MenuItem("三级菜单2", "url32");
              MenuItem menu33 = new MenuItem("三级菜单3", "url33");
              MenuItem menu34 = new MenuItem("三级菜单4", "url34");
              MenuItem menu35 = new MenuItem("三级菜单5", "url35");
              
              MenuItem menu21 = new MenuItem("二级菜单1", "url21");
              menu21.addChildMenu(menu31);
              menu21.addChildMenu(menu32);
              menu21.addChildMenu(menu33);
              
              MenuItem menu22 = new MenuItem("二级菜单2", "url22");
              menu22.addChildMenu(menu34);
              menu22.addChildMenu(menu35);
              
              MenuItem root = new MenuItem("根目录", "root");
              root.addChildMenu(menu21);
              root.addChildMenu(menu22);

以上就是通过jstl标签构造生成树的全部代码了

最后生成的html代码
<div style=" float:left; display:block; margin:10px; overflow:auto; width:200px; height:300px; border:solid 1px #CCC; line-height:21px; background:#FFF;">
<ul class="tree">
       <li>
              <a href="main.html" target="navTab" rel="main">根目录</a>            
              <ul>
                     <li>
                           <a href="main.html" target="navTab" rel="main">二级菜单1</a>
                           <ul>
                                  <li><a href="main.html" target="navTab" rel="main">三级菜单1</a></li>        
                                  <li><a href="main.html" target="navTab" rel="main">三级菜单2</a></li>
                                  <li><a href="main.html" target="navTab" rel="main">三级菜单3</a></li>                          
                           </ul>
                     </li>
                     <li>
                           <a href="main.html" target="navTab" rel="main">二级菜单2</a>
                           <ul>                   
                                  <li>
                                         <a href="main.html" target="navTab" rel="main">三级菜单4</a>
                                         <a href="main.html" target="navTab" rel="main">三级菜单5</a>
                                  </li>
                           </ul>
                     </li>  
              </ul>
       </li>
</ul>
</div>


   发表时间:2012-04-24  
不错。楼主。
0 请登录后投票
   发表时间:2012-04-25  
wotodoo 写道
<jsp:include page="recursive.jsp"/>


利用这种方式来调用自身还真是没用过,下次借鉴试下,呵~ 不过一般情况不建议直接在在页面上写代码吧,这样代码比较难维护呀,且易读性没那么好,以上纯属个人意见,莫怪 
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics