0

我的代码有什么问题吗?我的 if else 语句不起作用。

<%
String pages = request.getParameter("page");
%>
<input type="hidden" id="page" value="<%=pages%>"/>
        <div class="navbar navbar-fixed-bottom">
        <div class="navbar-inner">
            <a class="brand" href="index.jsp">PeachMangoPie</a>
            <ul class="nav pull-right">
            <li <%if(pages=="papoy"){out.write("class='active' ");}%>><a href="index.jsp?page=papoy">Papoy</a></li>
            <li class="divider-vertical"></li>
            <li <%if(pages=="chuckie"){out.write("class='active' ");}%>><a href="index.jsp?page=chuckie">Chuckie</a></li>
            <li class="divider-vertical"></li>
            <li <%if(pages=="dutchmill"){out.write("class='active' ");}%>><a href="index.jsp?page=dutchmill">Dutch Mill</a></li>
            <li class="divider-vertical"></li>
            <li <%if(pages=="icecream"){out.write("class='active' ");}%>><a href="index.jsp?page=icecream">Ice Cream</a></li>
            <li class="divider-vertical"></li>
            <li <%if(pages=="chicken"){out.write("class='active' ");}%>><a href="index.jsp?page=chicken">Chicken</a></li>
            <li class="divider-vertical"></li>
            <li <%if(pages=="straberrycake"){out.write("class='active' ");}%>><a href="index.jsp?page=strawberrycake">Strawberry-Cake</a></li>
            </ul>
        </div>
        </div>
4

3 回答 3

4

您需要使用 .equals 方法来测试字符串是否相等。试试这个:

<li <%if(pages.equals("papoy")){out.write("class='active' ");}%>><a href="index.jsp?page=papoy">Papoy</a></li>
于 2013-07-29T00:49:16.107 回答
1

要修复您的代码:使用equalsto compare Strings(如Harshal Pandya's answer所示)。

要真正修复您的代码:请停止使用 scriptlet,如下所述:如何避免 JSP 文件中的 Java 代码?. 使用ELJSTL和 JavaScript重写所有这些。我为此编写了一个基本示例,以省略所有难以维护的 scriptlet 和 HTML 代码:

<script type="text/javascript">
    window.onload = function() {
        var page = '<c:out value="${param.page}" />';
        var ulOptions = document.getElementById('ulOptions');
        var liItems = ulOptions.getElementsByTagName("li");
        for(var i = 0; i < liItems.length; i++) {
            var liItem = liItems[i];
            var a = liItem.getElementsByTagName("a")[0];
            if (a !== undefined && a.innerText.toLowerCase() === page) {
                liItem.setAttribute("class", "brand");
            }
        }
    };
</script>

<input type="hidden" id="page" value="${param.page}"/>
<div class="navbar navbar-fixed-bottom">
    <div class="navbar-inner">
        <a class="brand" href="index.jsp">PeachMangoPie</a>
        <%--
            provided id for ul HTML component in order to ease
            JavaScript onload function development
        --%>
        <ul id="ulOptions" class="nav pull-right">
            <li><a href="index.jsp?page=papoy">Papoy</a></li>
            <li class="divider-vertical"></li>
            <li><a href="index.jsp?page=chuckie">Chuckie</a></li>
            <li class="divider-vertical"></li>
            <li><a href="index.jsp?page=dutchmill">Dutch Mill</a></li>
            <li class="divider-vertical"></li>
            <li><a href="index.jsp?page=icecream">Ice Cream</a></li>
            <li class="divider-vertical"></li>
            <li><a href="index.jsp?page=chicken">Chicken</a></li>
            <li class="divider-vertical"></li>
            <li><a href="index.jsp?page=strawberrycake">Strawberry-Cake</a></li>
        </ul>
    </div>
</div>

提供的代码说明:

  • ${param.page}替换request.getParameter("page");
  • window.onload = function() { ... };定义加载页面后要执行的 JavaScript 函数(更多信息:onload Event)。
  • <c:out>将直接在生成的 HTML 上打印文本。更多信息:<c:out>
  • document.getElementById通过它的 id 返回一个 HTML 元素(函数名非常简单地解释了这一点)。
  • getElementsByTagName返回一个NodeList包含所有带有相应标签名称的内部 HTML 元素的 a(函数名称非常简单地说明了这一点)。
  • for(var i = 0; i < liItems.length; i++)遍历<li>里面的所有元素ulOptions
  • liItem.getElementsByTagName("a")[0]如前所述,将<a>元素放在 position 中0
  • a !== undefined && a.innerText.toLowerCase() === page验证a存在(这适用于那些<li>没有内部元素的人)并根据请求参数<a>验证内部文本。page
于 2013-07-29T02:22:02.960 回答
0

这是更好的方法(没有脚本):

<li <c:out value="${param.page=='papoy'?'class=active':''}"/>">
   <a href="index.jsp?page=papoy">Papoy</a>
</li>
于 2013-07-29T01:43:50.070 回答