意外にも機能しない次のことを試しました。jstlでは.valuesがまったく機能しないようです。
<c:forEach var="r" items="${applicationScope['theMap'].values}">
マップは次のように定義されます(後でServletContextに保存されます)。
Map<Integer, CustomObject> theMap = new LinkedHashMap<Integer, CustomObject>();
これを機能させる方法は?私は実際には、foreachループの内部を変更することを避けたいと思っています。
それで、マップ値を反復処理したいですか? 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>
_
次のようにjstlでマップを繰り返すことができます
<c:forEach items="${numMap}" var="entry">
${entry.key},${entry.value}<br/>
</c:forEach>
また、必要に応じてこのタイプを使用できます
<c:forEach var="key" items="${theMap.keySet()}" varStatus="keyStatus">
<c:set var="value" value="${theMap[key]}" />
</c:forEach>