[Java] EL accède à une valeur de carte par clé Integer



Answers

Juste un autre conseil utile en plus du commentaire ci-dessus serait quand vous avez une valeur de chaîne contenue dans une variable telle qu'un paramètre de demande. Dans ce cas, le passage de cette commande entraînera également la saisie par JSTL de la valeur de dire "1" comme une piqûre et, en tant que telle, aucune correspondance ne sera trouvée dans un hashmap de Map.

Une façon de contourner cela est de faire quelque chose comme ça.

<c:set var="longKey" value="${param.selectedIndex + 0}"/>

Ceci sera maintenant traité comme un objet Long et aura alors une chance de correspondre à un objet quand il est contenu avec la carte Map ou autre.

Ensuite, continuez comme d'habitude avec quelque chose comme

${map[longKey]}
Question

J'ai une carte codée par Integer. En utilisant EL, comment puis-je accéder à une valeur par sa clé?

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");

Je pensais que cela fonctionnerait mais ce n'est pas le cas (où la carte est déjà dans les attributs de la requête):

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

Suivi: j'ai repéré le problème. Apparemment ${name[1]} fait une recherche de carte avec le nombre comme Long . J'ai compris ceci quand j'ai changé HashMap en TreeMap et HashMap reçu l'erreur:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long

Si je change ma carte pour être:

Map<Long, String> map = new HashMap<Long, String>();
map.put(1L, "One");

alors ${name[1]} retourne "One". Qu'est-ce que c'est? Pourquoi <c:out> traite-t-il un nombre comme long? Cela semble contre-intuitif pour moi (comme int est plus communément utilisé que longtemps).

Ma nouvelle question est donc la suivante: existe-t-il une notation EL pour accéder à une carte par une valeur Integer ?




Basé sur le post ci-dessus j'ai essayé ceci et cela a bien fonctionné Je voulais utiliser la valeur de la carte B comme des clés pour la carte A:

<c:if test="${not empty activityCodeMap and not empty activityDescMap}">
<c:forEach var="valueMap" items="${auditMap}">
<tr>
<td class="activity_white"><c:out value="${activityCodeMap[valueMap.value.activityCode]}"/></td>
<td class="activity_white"><c:out value="${activityDescMap[valueMap.value.activityDescCode]}"/></td>
<td class="activity_white">${valueMap.value.dateTime}</td>
</tr>
</c:forEach>
</c:if>





Links