私はまたコレクションであるマップを持っていたいと思います。具体的には、特定のキーに複数のエントリがある場合を含めて、マップのエントリを繰り返し処理できるようにしたいと考えています。地図もコレクションにできますか?
私が解決しようとしている特定の問題は、c:forEach
を使用して反復し、${a.b.c}
のような式の両方でjstlで使用できるオブジェクトを提供することです。この例では、${a.b.c}
を最初の値であるc
(または存在しない場合はnull)と評価したいだけですが、c
をすべて<c:forEach items="${a.b.c}">
で繰り返してループボディにそれぞれc
マップには同じキーがありますが
メソッドの観点から見ると、これは簡単で、entrySet()
メソッドが同じキーを持つ複数のエントリを持つセットを返すMap
の実装を提供するだけです。しかし、これはマップの契約に違反しているように見えるので、物事は微妙で悲惨な方法で打ち壊されるのだろうか?他の誰かがこのようなことをしていますか?
(あなたは私がXMLを提示しようとしていると推測した場合、あなたは正しいだろう)
EDIT
これはJSTLに使用するためのものであることに注意してください、そう何インタフェース私が提示満たしている必要があります。 2つの条件:[]
と.
演算子で使用するため
- 、それは
Map
、List
、アレイやJavaBeansオブジェクトでなければなりません(そのうちのそれをすることはできませんforEachので使用するためのリストまたは配列インデックスが数字ではありませんので) - は、配列、
Collection
、Iterator
、Enumeration
、Map
、またはString
でなければなりません。
だけそう.containsKey()
、.get()
、および.entrySet()
を呼び出し、侵害された不変量を気にしませ、および内部で保存しません地図のコピーをしていない私は、本当の問題があると思い、私はJSTL に数えることができます特別な反復動作。
閉じるが、それは私が必要とするもののようには見えない。私は 'get()'メソッドがすべての値のリストを返すことを望んでいません。私はそれがいくつかの明確に定義された値(最初の値)を返すようにします。また、 'Map'ではないようですので、jstl ELで変更せずに使うことはできません。 –