我想用jstl做这样的事情:
int i=0;
int j=0;
<c:forEach items="${commentNames}" var="comment">
<c:forEach items="${rates}" var="rate">
<c:if test="${i==j}">
int i++
</c:if>
</c:forEach>
int j++;
</c:forEach>
这是否可以使用jstl?当我尝试这个时它会遇到错误,我想知道是否有正确的方法来编写它
答案 0 :(得分:9)
不是直接,但您可以使用varStatus
将LoopTagStatus
的实例放在<c:forEach>
的范围内。它提供了几个getter来解决循环index以及它是循环的first还是last迭代。
我只是不确定你的<c:if>
是如何理解的,但我认为你实际上有两个相同大小的列表,其中包含评论名称和评论率,你需要只显示相同索引的费率作为评论。
<c:forEach items="${commentNames}" var="comment" varStatus="commentLoop">
${comment}
<c:forEach items="${rates}" var="rate" varStatus="rateLoop">
<c:if test="${commentLoop.index == rateLoop.index}">
${rate}
</c:if>
</c:forEach>
</c:forEach>
然而这很笨拙。您可以直接通过索引更好地获得费率。
<c:forEach items="${commentNames}" var="comment" varStatus="commentLoop">
${comment}
${rates[commentLoop.index]}
</c:forEach>
更好的方法是创建一个Comment
和name
属性的rate
对象。
public class Comment {
private String name;
private Integer rate;
// Add/autogenerate getters/setters.
}
以便您可以按如下方式使用它:
<c:forEach items="${comments}" var="comment">
${comment.name}
${comment.rate}
</c:forEach>