web-dev-qa-db-ja.com

JSTL <c:forEach>タグを使用して、リストおよびマップの要素を反復処理します

ArrayList型のオブジェクトを返すJSFバッキングBeanがある場合、<c:foreach>を使用してリスト内の要素を反復処理できるはずです。各要素にはマップが含まれており、JSTLを介してマップコンテンツにアクセスする方法の質問は回答されていますが here ですが、そのようなマップの配列を渡すと、それらを反復する方法が見つかりません。 JSTLを使用して引き続きマップコンテンツにアクセスします。単純なイテレータについて言及しているドキュメントがありますが、アイテム自体がマップであるイテレータについては言及していません。

Java ListがJSPで繰り返される方法の簡単な例を誰かに教えていただければ、とても感謝しています。マーク

49
volvox

マーク、これはすでに 前のトピック で回答されています。しかし、OK、ここに再びあります:

${list}List<Object>を指している場合、次のようになります

<c:forEach items="${list}" var="item">
    ${item}<br>
</c:forEach>

基本的に、「通常のJava」の以下と同じです。

for (Object item : list) {
    System.out.println(item);
}

代わりにList<Map<K, V>>がある場合、次のようになります

<c:forEach items="${list}" var="map">
    <c:forEach items="${map}" var="entry">
        ${entry.key}<br>
        ${entry.value}<br>
    </c:forEach>
</c:forEach>

基本的に、「通常のJava」の以下と同じです。

for (Map<K, V> map : list) {
    for (Entry<K, V> entry : map.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    }
}

keyvalueは、ここでは特別なメソッドなどではありません。これらは、実際にはゲッターメソッドです Map.Entry オブジェクト(青色のMap.EntryリンクをクリックしてAPIドキュメントを表示します)。 EL(Expression Language)では、.ドット演算子を使用して、「プロパティ名」(getプレフィックスなしのゲッターメソッド名)を使用してゲッターメソッドにアクセスできます。

そうは言っても、質問にノイズが加わるため、前のトピックの「回答」をクリーンアップする必要があります。 「回答」に投稿したコメントもお読みください。

112
BalusC

これを試して

<c:forEach items="${list}" var="map">
    <tr>
        <c:forEach items="${map}" var="entry">

            <td>${entry.value}</td>

        </c:forEach>
    </tr>
</c:forEach>
0
Prateek RG