在处理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循环的方式。
答案 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循环,它不会产生任何逻辑差异,这完全是个人选择。