将 c:forEach 限制为最大值,当在其主体中使用 c:if 条件时



我对if条件有问题。我正在从数据库获取数据,所有内容都在 2 个网站表上查看。网站上的表格应限制为 3 行。在数据库中有一个名为"screen"的列。"屏幕"可以是"第一"、"第二"或"两者"。"first"是第一个表,"second"是第二个表,"both"表示两个表。例如,如果我将数据添加为"第一个"屏幕,则应在第一个表中查看,如果我将数据添加为"两者",则应在两个表中查看,依此类推。我将其限制为 3 行,所以问题是如果我添加 3 个"第一个"屏幕和 1 个"两个"屏幕,我在第一个表上看到 3 行,但在第二个屏幕上没有任何行。该代码用于第一个表:

<c:forEach items="${foo}" var="c" varStatus="status">
      <c:if test="${status.count <= 3 && c.screen.equals('both') || status.count <= 3 && c.screen.equals('first')}">
            <tr><td>something_bla_bla</td></tr>
      </c:if>
 </c:forEach>

第二个表的代码几乎相同 - diffrence 只有 c.screen.equals('second'(添加 3 个"第一个"显示 3 行 - 没关系,添加 3 个"两者"显示 3 行 - 没关系,但是,如果我添加 3 个"第一"和 1 个"两者",则应在第二个表中查看"两者"记录,这不是因为那 3 个限制。

只需计算您输出了多少行即可。例如:

<c:set var="count" value="0"/>
<c:forTokens items="first,second,second,both,first,both,second"
             delims=","
             var="item">
  <c:if test="${count lt 3 and 'both,first'.contains(item)}">
    <c:out value="${item}"/>
    <c:set var="count" value="${count + 1}"/>
  </c:if>
</c:forTokens>
<br/>
<c:set var="count" value="0"/>
<c:forTokens items="first,second,second,both,first,both,second"
             delims=","
             var="item">
  <c:if test="${count lt 3 and 'both,second'.contains(item)}">
    <c:out value="${item}"/>
    <c:set var="count" value="${count + 1}"/>
  </c:if>
</c:forTokens>

这将输出(忽略空格(:

first both first<br/>
second second both

请注意,我使用的是与(item eq 'both' or item eq 'first')具有相同效果的'both,first'.contains(item),但更短(特别是如果您有移动字符串要检查(。

最新更新