【发布时间】:2011-08-21 03:24:00
【问题描述】:
是否有使用 JSTL 创建带有导航链接的菜单的库或最佳实践方法?
我在每个页面上都有 5 个链接。我希望指向当前页面的链接被“禁用”。我可以手动执行此操作,但这一定是人们以前解决过的问题。如果有一个 taglib 可以处理它,我不会感到惊讶,但我不知道它。
【问题讨论】:
是否有使用 JSTL 创建带有导航链接的菜单的库或最佳实践方法?
我在每个页面上都有 5 个链接。我希望指向当前页面的链接被“禁用”。我可以手动执行此操作,但这一定是人们以前解决过的问题。如果有一个 taglib 可以处理它,我不会感到惊讶,但我不知道它。
【问题讨论】:
您可以让 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文件夹中,防止直接访问。
【讨论】:
ServletContextListener。在contextInitialized() 中,通过event.getServletContext().setAttribute("menu", menu) 创建并存储菜单。它将以通常的方式在 EL 中可用。另请参阅此答案以获取示例stackoverflow.com/questions/3468150/using-init-servlet/…