为什么我的jstl <c:if test =“(应该是真的)”>甚至返回错误的项目?</c:if>

时间:2012-08-14 14:41:39

标签: java jsp jstl

我有一个对象值列表,每个对象值的一个字段是boolean,名为“displayable”。

这是我的代码:

<% int z = 1 %>
<c:forEach var="value" items="${valueList}" varStatus="status">
    <% String className = (z % 2 == 1) ? "Odd" : ""; %>
    <li class="<%= className %>">
        <c:if test="${value.displayable}"> 
            /* there are ten items in that list
            8 of the value.displayable are true
            2 are false */

            <a href=""> title </a>
            <a href=""> link </a>
        </c:if>
    </li>
    <% ++z; %>
</c:forEach>

从那个循环我应该只得到正确的项目?不知怎的,我得到了所有10件物品。

2 个答案:

答案 0 :(得分:3)

我会接受你的意见,因为其中两个项目有displayable == false。在这种情况下,我假设您将获得10个<li></li>项的列表,但其中两个项目内没有“标题”和“链接”链接。

那是因为您正在呈现<li></li>标签(并切换css类,并递增z计数器)无视当前项目是否可显示。将for循环的所有内容(scriptlet和<li></li>)放在<c:if>中,这样当 项可显示时,您才会显示列表项。< / p>

答案 1 :(得分:1)

您可以像这样重写代码

    <c:forEach var="value" items="${valueList}" varStatus="status">
        <c:if test="${value.displayable}"> 
          <c:if test="${status.index%2==0 }">   
             <li>
                <a href=""> title </a>
                <a href=""> link </a>
            </li>
          </c:if>
          <c:if test="${status.index%2!=0 }">   
             <li class="Odd">
                <a href=""> title </a>
                <a href=""> link </a>
            </li>
         </c:if>
     </c:if>     
 </c:forEach>