2011-05-08 32 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