2

我有一个对象值列表,每个对象值的字段之一是名为“可显示”的布尔值。

这是我的代码:

<% 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 件物品。

4

2 回答 2

3

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

这是因为无论当前项目是否可显示,您都在渲染<li></li>标签(并切换 css 类并增加z计数器) 。将该循环的所有内容(scriptlet 和)放入其中,以便仅在项目可显示时显示列表for<li></li><c:if>

于 2012-08-14T14:51:24.337 回答
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>
于 2012-08-14T15:14:48.037 回答