【问题标题】:jstl forEach loop - accessing a parent Id for the last child in an arrayjstl forEach 循环 - 访问数组中最后一个孩子的父 ID
【发布时间】:2016-10-06 14:10:22
【问题描述】:

我将尝试简化我的示例,以便于理解问题。

我正在循环一个数组,它是父数组的一部分。我希望能够在遍历子数组时识别父数组元素发生变化的点。

假设父数组是 ${bets},子数组是 ${tips}。我有 3 个赌注,每个赌注都包含 3 个提示。我希望能够识别循环中 ${bet.id} 更改的点。

我可以使用 ${tip.bet.id} 从小费元素访问 ${bet.id}

代码如下所示:

<c:forEach var="tip" items="${sortedTips}" varStatus="loop">
  tip ${loop.index} - ${tip.bet.id}
</c:forEach>

输出如下:

  • 提示 1 - 518
  • 提示 2 - 518
  • 提示 3 - 518
  • 提示 4 - 519
  • 提示 5 - 519
  • 提示 6 - 519
  • 提示 7 - 520
  • 提示 8 - 520
  • 提示 9 - 520

我希望能够每个新 ${bet.id} 之间添加内容,因此我希望实现以下目标:

  • 提示 1 - 518
  • 提示 2 - 518
  • 提示 3 - 518
  • 其他内容
  • 提示 4 - 519
  • 提示 5 - 519
  • 提示 6 - 519
  • 其他内容
  • 提示 7 - 520
  • 提示 8 - 520
  • 提示 9 - 520
  • 其他内容

如果有帮助,我会在每次下注的顶部找到一种方法,如下所示:

<c:set var="lastBetId" value="" />
<c:forEach var="tip" items="${sortedTips}" varStatus="loop">

  <c:if test="${tip.bet.id != lastBetId}">
    Additional Piece of content <br />
  </c:if>
  <c:set var="lastBetId" value="${tip.bet.id}" />

  tip ${loop.index} - ${tip.bet.id}
</c:forEach>

结果:

  • 其他内容
  • 提示 1 - 518
  • 提示 2 - 518
  • 提示 3 - 518
  • 其他内容
  • 提示 4 - 519
  • 提示 5 - 519
  • 提示 6 - 519
  • 其他内容
  • 提示 7 - 520
  • 提示 8 - 520
  • 提示 9 - 520

但我不知道如何在每个赌注的底部插入这个。

【问题讨论】:

  • jsp中不用做,把逻辑移到controller中。

标签: jsp loops foreach jstl


【解决方案1】:

你需要内部循环,像这样

<c:set var="num" value="1" />
<c:forEach var="bet" items="${bets}" varStatus="loop">
   <c:forEach var="tip" items="${bet}" varStatus="loopInner">
      tip <c:out value="${num}" /> - ${tip.id}
      <c:set var="num" value="${num + 1}"/>
   </c:forEach>
   <!-- This is the place for additional content -->
</c:forEach>

【讨论】:

  • 是的,这将起作用-并且是先前设置的一部分,但是通过请求删除容器循环(在这种情况下为下注循环),所以我只需要一个解决方案提示循环。不过感谢您的建议。
【解决方案2】:

您是否尝试添加此行

<c:if test="${tip.bet.id != lastBetId}">
Additional Piece of content <br />

下面

tip ${loop.index} - ${tip.bet.id}

并删除

<c:set var="lastBetId" value="" />

看起来像这样

<c:forEach var="tip" items="${sortedTips}" varStatus="loop">

tip ${loop.index} - ${tip.bet.id}
<c:set var="lastBetId" value="${tip.bet.id}" />
<c:if test="${tip.bet.id != lastBetId}">
Additional Piece of content <br />
</c:if>


</c:forEach>

【讨论】:

  • 因为它循环了 3 个提示,所以这个条件只有在第一个提示循环后才成立,因此将其移动到底部会显示第一个提示下方的附加内容,而不是最后一个(第 3 个) 提示。
  • 在您的循环中,此代码 &lt;c:set var="lastBetId" value="" /&gt; 是此处检查的代码 ' 附加内容 ' 在去这里之前 '' 这就是条件变为真的原因并添加 附加内容.
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
相关资源
最近更新 更多