我遇到了条件问题。我从数据库获取数据,所有内容都在2个网站表上查看。网站上的表格应仅限于3行。在DB中有一个名为“screen”的列。 'screen'可以是'first','second'或'both'。 '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个限制。
答案 0 :(得分:0)
只需要计算输出的行数。例如:
<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
请注意,我使用的'both,first'.contains(item)
效果与(item eq 'both' or item eq 'first')
相同,但更短(特别是如果您要移动字符串进行检查)。