我有一个对象值列表,每个对象值的一个字段是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件物品。
答案 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>