0

在处理 jstl 标签时,我遇到了 foreach 循环。对于 'foreach' 循环,jstl 提供了两个属性 var 和 varstatus。据我了解,它们可用于直接播放 index 参数。但我想出了另一种在 foreach 循环中直接处理索引的方法。

<c:forEach items="${someForm.colorSettings}">
    <tr>
        <c:if test="${someForm.colorSettings[index].parameterValue1 == 'GreaterThanColor'}">
            <td height="30"><fmt:message key="${someForm.colorSettings[index].parameterName.messageKey}" /></td>
            <td class="rightbordernone"><div class="relative mlbdiv">
                    <div class="color_picker_dis" style="background-color: ${someForm.colorSettings[index].colorCodeBackground}"></div>
                    <div class="color_picker_dis" style="background-color: ${someForm.colorSettings[index].colorCodeForeground}"></div>
                </div></td>
        </c:if>
    </tr>
</c:forEach>

只是想要一个建议。如果我使用上述方法直接处理索引,尽管使用 var 和 varstatus 变量,在某种程度上是错误的吗?尽管使用 varstatus 属性,直接使用索引是否有任何性能开销?我猜它只是表示使用 while 或 for 循环的方式。

4

4 回答 4

2

我认为如果您直接使用索引变量或 var 参数,它不会有任何区别。正如上面提到的,这是一个类似的情况,就像我们在 java 中使用 while 或 for 循环一样。在 var 中存储列表引用或直接使用列表几乎是一回事。据我所知,如果我们使用索引变量,无论如何都不会影响性能

于 2013-06-17T05:32:03.843 回答
1

它更长,因此更难阅读,并且不断索引到集合中。

打字真的比打字更可取bddForm.colorSettings[index]colorSetting

性能方面,它取决于底层集合:anArrayList提供对索引成员的 O(1) 访问,而链表是 O(N)。有关系吗?不适用于任何大小合理的 JSP 页面,但这取决于您对列表的实际操作。

于 2013-06-16T18:50:48.030 回答
0

AFAIK 没有处罚。

但是考虑标签foreach中的 a 。foreach索引变量名不会很明显。

为避免这种情况 - 我建议您始终使用 varstatus / var。

于 2013-06-16T18:03:46.713 回答
0

完全没问题的是您使用索引变量而不是使用属性 var 和 var status。它只是一种表示方式。

在 java 中使用 while 或 foreach 循环的一个非常相似的案例。在某些情况下使用 while 循环而不是 for 循环没有任何逻辑差异完全是个人选择。

于 2013-06-16T18:35:45.957 回答