java download - Obtenir de la valeur de hashmap en fonction de la clé de JSTL




core openclassroom (4)

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>

Je veux obtenir la valeur de HashMap basée sur 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 qu'il imprime tout, ce que je veux faire est d'obtenir la valeur dépend de la clé comme: hash.key ou 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 StackTrace: la 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é.


Si tout ce que vous essayez de faire est d'obtenir la valeur d'une seule entrée dans une carte, il n'est pas nécessaire de boucler une collection du tout. 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.


J'ai eu problème avec les solutions mentionnées ci-dessus en spécifiant que la clé de chaîne me donnerait javax.el.PropertyNotFoundException. Le code ci-dessous a fonctionné pour moi. Dans ce j'ai utilisé le statut pour compter l'indice de chaque boucle et affiché la valeur de l'indice que je suis intéressé sur

<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>    

Vous parlez de collisions de hachage. Les collisions de hash sont un problème quel que soit le type en cours hashCode'd. Toutes les classes qui utilisent hashCode (par exemple HashMap) gèrent correctement les collisions de hachage. Par exemple, HashMap peut stocker plusieurs objets par compartiment.

Ne vous inquiétez pas à moins que vous appelez hashCode vous-même. Les collisions de hash, bien que rares, ne cassent rien.





java jsp hashmap jstl