c:forEach循环使用直接索引与属性var和varStatus?

时间:2013-06-16 17:45:59

标签: java jsp foreach jstl

在处理jstl标签时,我遇到了foreach循环。对于'foreach'循环,jstl提供了两个属性var和varstatus。据我所知,它们可以用来直接播放索引参数。但我想出了在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 个答案:

答案 0 :(得分:2)

我不认为如果你直接使用索引变量或var参数会产生任何影响。如上所述,它类似于我们在java中使用while或for循环的情况。在var中存储列表引用或直接使用列表几乎是同一件事。据我所知,如果我们使用索引变量

,则无论如何都没有性能影响

答案 1 :(得分:1)

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

输入bddForm.colorSettings[index]是否比colorSetting

更适合

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

答案 2 :(得分:0)

没有惩罚AFAIK。

但请考虑foreach代码中的foreach。索引变量名称不明显。

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

答案 3 :(得分:0)

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

在java中使用while或foreach循环的非常类似的情况。在某些情况下使用while循环而不是for循环,它不会产生任何逻辑差异,这完全是个人选择。