web-dev-qa-db-ja.com

マップの値に対して直接jstlforeachを使用するにはどうすればよいですか?

意外にも機能しない次のことを試しました。jstlでは.valuesがまったく機能しないようです。

<c:forEach var="r" items="${applicationScope['theMap'].values}">

マップは次のように定義されます(後でServletContextに保存されます)。

Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();

これを機能させる方法は?私は実際には、foreachループの内部を変更することを避けたいと思っています。

11
Yves

それで、マップ値を反復処理したいですか? MapにはgetValues()メソッドがないため、試行は機能しません。 _<c:forEach>_は、反復ごとに _Map.Entry_ を返し、反復ごとにgetKey()メソッドとgetValue()メソッドがあります。したがって、次のようにする必要があります。

_<c:forEach var="entry" items="${theMap}">
    Map value: ${entry.value}<br/>
</c:forEach>
_

EL 2.2以降、ゲッター以外のメソッドを呼び出すための新しいサポートにより、Map#values()を直接呼び出すことができます。

_<c:forEach var="value" items="${theMap.values()}">
    Map value: ${value}<br/>
</c:forEach>
_

参照:

37
BalusC

次のようにjstlでマップを繰り返すことができます

<c:forEach items="${numMap}" var="entry">
  ${entry.key},${entry.value}<br/>
</c:forEach>
9
user1377739

また、必要に応じてこのタイプを使用できます

<c:forEach var="key" items="${theMap.keySet()}" varStatus="keyStatus">
    <c:set var="value" value="${theMap[key]}" />
</c:forEach>
2
mehmet cinar