web-dev-qa-db-fra.com

Obtenez de la valeur de hashmap basée sur la clé de JSTL

Je veux obtenir la valeur de HashMap en fonction de la clé.

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

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

Ce que j'ai fait c'est

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

Mais il semble que tout soit imprimé, ce que je veux faire est d’obtenir la valeur qui dépend d’une clé du type: hash.key ou de quelque chose

METTRE À JOUR:
J'ai fait quelque chose comme ça mais ça ne marche toujours pas

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

et le StackTrace: Property 'External' not found on type Java.util.HashMap$Entry 
Je suis à peu près sûr qu'il y a vraiment ce genre de clé.

41
newbie

si vous essayez uniquement d'obtenir la valeur d'une seule entrée dans une carte, il n'est pas nécessaire de parcourir en boucle une collection. En simplifiant légèrement la réponse de gautum, vous pouvez obtenir la valeur d’une entrée de carte nommée comme suit:

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

où "map" est la collection et "key" est la clé de chaîne pour laquelle vous essayez d'extraire la valeur.

83
jason

pourriez-vous s'il vous plaît essayer ci-dessous le code

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

J'avais un problème avec les solutions mentionnées ci-dessus, car spécifier la clé de chaîne me donnerait javax.el.PropertyNotFoundException. Le code ci-dessous a fonctionné pour moi. En cela, j'ai utilisé status pour compter l'indice de chaque boucle et afficher la valeur de l'indice qui m'intéresse

<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