2011-05-08 66 views
6

是否有一个使用JSTL创建导航链接菜单的库或最佳实践方式?创建一个带JSTL导航链接的菜单

我有5个链接在每一页上。我希望指向当前页面的链接“禁用”。我可以手动执行此操作,但这必定是人们以前解决的问题。如果有一个taglib处理它,但我不知道它,我不会感到惊讶。

回答

8

您可以让JSTL/EL根据请求的JSP页面的URL有条件地生成HTML/CSS。您可以在EL中获得${pageContext.request.servletPath}。假设你已经在应用范围在一些Map<String, String>链接:

<ul id="menu"> 
    <c:forEach items="${menu}" var="item"> 
     <li> 
      <c:choose> 
       <c:when test="${pageContext.request.servletPath == item.value}"> 
        <b>${item.key}</b> 
       </c:when> 
       <c:otherwise> 
        <a href="${item.value}">${item.key}</a> 
       </c:otherwise> 
      </c:choose> 
     </li> 
    </c:forEach> 
</ul> 

或者当你只是一个CSS类

<ul id="menu"> 
    <c:forEach items="${menu}" var="item"> 
     <li><a href="${item.value}" class="${pageContext.request.servletPath == item.value ? 'active' : 'none'}">${item.key}</a></li> 
    </c:forEach> 
</ul> 

后是可以使用<jsp:include>在JSP页面中重用的内容。把上面的在自己的menu.jsp文件,它包含如下:

<jsp:include page="/WEB-INF/menu.jsp" /> 

页被放置在WEB-INF文件夹,以防止直接访问。

+0

美丽。你有什么提示可以用jstl创建这个列表吗?我不想在scriptlet或控制器层中构建它。 – 2011-05-08 15:24:04

+2

如果它是应用程序范围的,我只需使用'ServletContextListener'。在'contextInitialized()'中,通过'event.getServletContext()。setAttribute(“menu”,menu)''创建和存储菜单。它通常以EL的方式提供。另请参阅此答案的示例http://stackoverflow.com/questions/3468150/using-init-servlet/3468317#3468317 – BalusC 2011-05-08 15:29:48