web-dev-qa-db-ja.com

JSTLのキーに基づいてハッシュマップから値を取得します

キーに基づいてHashMapの値を取得したい。

HashMap<String, ArrayList<String>> map 
    = new HashMap<String, ArrayList<String>>();
ArrayList<String> arrayList = new ArrayList<String>();

map.put("key", arrayList);
request.setAttribute("key", map);

私がしたことは

<c:forEach var="map" items="${requestScope.key}">
    <c:forEach var="hash" items="${map.value}">
        <option><c:out value="${hash}"/></option>
    </c:forEach>
</c:forEach>

しかし、それはすべてを印刷しているようです、私がしたいことは、次のようなキーに依存する値を取得することです:hash.keyまたは何か

更新:
このようなことをしましたが、まだ動作しません

<c:forEach var="map" items="${requestScope.key}">
    <c:forEach var="hash" items="${map['key']}">
        <option><c:out value="${hash}"/></option>
    </c:forEach>
</c:forEach>

およびStackTrace:Property 'External' not found on type Java.util.HashMap$Entry
本当にそのようなキーがあると確信しています。

44
newbie

マップ内の1つのエントリの値を取得するだけであれば、コレクションをループする必要はまったくありません。 gautumの応答をわずかに単純化すると、次のように名前付きマップエントリの値を取得できます。

<c:out value="${map['key']}"/>

ここで、「map」はコレクション、「key」は値を抽出しようとしている文字列キーです。

87
jason

以下のコードを試してください

<c:forEach var="hash" items="${map['key']}">
        <option><c:out value="${hash}"/></option>
  </c:forEach>
5
Gautam

文字列キーを指定するとjavax.el.PropertyNotFoundExceptionが発生するため、上記のソリューションに問題がありました。以下に示すコードは私のために働いた。これで、ステータスを使用して各ループのインデックスをカウントし、興味のあるインデックスの値を表示しました

<c:forEach items="${requestScope.key}"  var="map" varStatus="status" >
    <c:if test="${status.index eq 1}">
        <option><c:out value=${map.value}/></option>
    </c:if>
</c:forEach>    
0
MR AND