【问题标题】:Creating a menu with navigation links with JSTL使用 JSTL 创建带有导航链接的菜单
【发布时间】:2011-08-21 03:24:00
【问题描述】:

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

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

【问题讨论】:

    标签: jsp menu jstl


    【解决方案1】:

    您可以让 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>
    

    您可以使用&lt;jsp:include&gt; 重用JSP 页面中的内容。将上面的内容放在它自己的menu.jsp 文件中,并包含如下:

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

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

    【讨论】:

    • 美丽。您对使用 jstl 创建该列表有什么建议吗?我不想在 scriptlet 或控制器层中构建它。
    • 如果它是应用程序范围的,我会使用ServletContextListener。在contextInitialized() 中,通过event.getServletContext().setAttribute("menu", menu) 创建并存储菜单。它将以通常的方式在 EL 中可用。另请参阅此答案以获取示例stackoverflow.com/questions/3468150/using-init-servlet/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多