8

私は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で可能ですか?これを試してみると、エラーが発生し、正しい書き方があるかどうか疑問に思いました。

4

1 に答える 1

9

直接ではありませんが、を使用しvarStatusてのインスタンスをLoopTagStatusのスコープに入れることができます<c:forEach>ループインデックスと、それがループの最初の反復であるか最後の反復であるかを把握するためのゲッターをいくつか提供します。

どのように意味があるのか​​わかり<c:if>ませんが、実際にはコメント名とコメント率が同じサイズのリストが2つあり、コメントと同じインデックスの率のみを表示する必要があると思います。

<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オブジェクトを作成する方がはるかに優れています。namerate

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> 

参照:

于 2012-06-02T23:17:27.980 に答える