【问题标题】:How to stop repeating of rows in inner<c:forEach>tag of JSTL in JSP page如何停止在 JSP 页面中的 JSTL 的内部 <c:forEach> 标记中重复行
【发布时间】:2015-02-24 04:46:32
【问题描述】:

我在内部 foreach 标记下的行对于外部 forEach 标记的所有值都在重复。 我的代码是

<c:forEach var="row" items="${ref.refarray_vac1(param.datepicker)}">
<c:forEach var="r" items="${ref.refernece(param.ref_logtime)}"> 


<tr bgcolor="darkgray ">
<td><c:out value="${r.logtime}"></c:out></td>

<td>
<c:choose><c:when test="${(r.beam_current) ne 0}"> 
<fmt:formatNumber value="${r.beam_current}" maxFractionDigits="2"    minIntegerDigits="2" pattern="##.##" var="mm"></fmt:formatNumber>
${(mm)}
</c:when>
<c:otherwise>
${r.beam_current}</c:otherwise></c:choose></td>


<td>
<c:choose><c:when test="${(r.beam_energy) ne 0}"> 
<fmt:formatNumber value="${r.beam_energy}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.##" var="mm"></fmt:formatNumber>
${(mm)}
</c:when>
<c:otherwise>
${r.beam_energy}</c:otherwise></c:choose></td>


<td>
<c:choose><c:when test="${(r.st2_vs2_bag1_rb) > 0.0}">
<fmt:formatNumber value="${r.st2_vs2_bag1_rb}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.##E0" var="mm"></fmt:formatNumber>
${(mm)}
</c:when>
<c:otherwise>
<c:out value="OFF"></c:out> </c:otherwise></c:choose></td>

<tr bgcolor="cornsilk">

<td><c:out value="${row.logtime}"></c:out></td>

<td>
<c:choose><c:when test="${(row.beam_current) > 0.0}"> 
<fmt:formatNumber value="${row.beam_current}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.##" var="mm"></fmt:formatNumber>
 ${(mm)}
 </c:when>
 <c:otherwise>
 ${row.beam_current}</c:otherwise></c:choose></td>


<td>
<c:choose><c:when test="${(row.beam_energy) > 0.0}"> 
<fmt:formatNumber value="${row.beam_energy}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.##" var="mm"></fmt:formatNumber>
${(mm)}
</c:when>
<c:otherwise>
${row.beam_energy}</c:otherwise></c:choose></td>


<td>
<c:choose><c:when test="${(row.st2_vs2_bag1_rb) > 0.0}"> 
<fmt:formatNumber value="${row.st2_vs2_bag1_rb}" maxFractionDigits="2" minIntegerDigits="2" pattern="##.##E0" var="mm"></fmt:formatNumber>
 ${(mm)}
</c:when>
<c:otherwise>
<c:out value="OFF"></c:out></c:otherwise></c:choose></td>

</c:forEach>
</c:forEach>

我希望只显示一个外部 forEach 循环的值,只显示一个内部 forEach 循环的值。不应该有重复的内部 forEach 循环行。

EDIT-1 我显示的输出格式为-

浅色显示的值(beam_current 10.01)对于灰色的每个值都会重复。假设外部 ForEach 标签有 22 行,那么内部循环的每个值将重复 22 次。

我希望在 beam_current 为 10 的灰色时只显示一次 10.01,然后内部 forEach 循环的另一个值应显示为对应于 beam_current 20.02 的灰色等。

【问题讨论】:

    标签: java jsp foreach jstl


    【解决方案1】:

    对于内部循环,使用c:forEachend="0" 属性

    它将迭代循环,仅用于内部 forEach 的第一项。

    <c:set var="count" value="0" scope="page" />
    <c:forEach var="row" items="${ref.refarray_vac1(param.datepicker)}">
        <c:forEach var="r" items="${ref.refernece(param.ref_logtime)}" begin="${count}" end="${count}"> 
            ...
            ...
    
            <c:set var="count" value="${count + 1}" scope="page" />
        </c:forEach>
    </c:forEach>
    

    【讨论】:

      【解决方案2】:

      听起来您想使用相同的索引遍历每个集合,就像在这个伪代码中一样:

      listA = [x, y, z]
      listB = [a, b, c]
      for (int i = 0; i < 3; i++):
        print listA[i]
        print listB[i]
      

      为此,您需要删除其中一个forEach 循环,并使用剩余循环的索引来访问另一个集合。例如:

      <c:forEach var="listAValue" items="${listA}" varStatus="i">
        <c:out value="${listA[i.count]}" />
        <c:out value="${listB[i.count]}" />
      

      我希望这会有所帮助,但如果没有,我建议您澄清您的问题。

      【讨论】:

        猜你喜欢
        • 2013-02-14
        • 2021-08-15
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 2018-03-22
        • 2014-06-05
        • 2017-04-08
        相关资源
        最近更新 更多