包含突出显示正确菜单项的HTML菜单

时间:2015-01-03 15:37:10

标签: html twitter-bootstrap jsp

我有一些JSP页面,其中我想要包含一个HTML菜单(FYI:正在使用Bootstrap)。

我想要包含的菜单包含三个项目,其代码如下所示。我想将它包含在jsp页面page1.jsp,page2.jsp和page3.jsp中。如您所见,在此示例中突出显示了第1页(设置为活动状态)。

如何使其动态化以便根据所使用的jsp页面突出显示正确的菜单项?

<ul class="nav nav-tabs" role="tablist">
    <li class="active"><a href="#">Page 1</a></li>
    <li><a href="#">Page 2</a></li>
    <li><a href="#">Page 3</a></li>
</ul>

1 个答案:

答案 0 :(得分:0)

使用Scriptlet

您应该将实际页面存储在页面开头的变量中,例如

<% String page = pageContext.getAttribute("page"); %>

然后你可以这样做:

<li class="<% page.equals("page1") ? "active" : "" %>">Page 1</li>
<li class="<% page.equals("page2") ? "active" : "" %>">Page 2</li>
<li class="<% page.equals("page3") ? "active" : "" %>">Page 3</li>

然而,在现代应用程序中使用scriptlet并不是很明智,你可以使用例如JSTL模板制作动态页面。

使用JSTL模板

首先我们导入核心JSTL标记库:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

这里我们将页面变量设置为page变量(这来自bean):

<c:set var="page" scope="session" value="${page}"/>

然后我们最后为变量做了一个条件:

<c:choose>
    <c:when test="${page eq "page1"}">
        <li class="active"><a href="#">Page 1</a></li>
    </c:when>
    <c:otherwise>
        <li><a href="#">Page 1</a></li>
    </c:otherwise>
</c:choose>

如果你想这样做,我实际上并没有真正推荐这种方法,因为它可以更简洁地表达,但我自己并不广泛地了解JSTL。

更短但更脏的方法(我没有测试过这个):

<li class="<c:if test="${page eq "page1"}">active</c:if>">
    <a href="#">Page 1</a>
</li>