2009-10-27 5 views
3

lorsque ma carte contient la clé avec un point dans leur nom, je ne peux pas accéder à la valeur correspondant directement avec le code usuel:Comment accéder à la valeur de la carte lorsque sa clé contient un point dans JSTL?

${recordForm.map['records.key']} 

Yat-il un moyen d'échapper au point? Ou dois-je recourir à la boucle de toutes les valeurs et vérifier par rapport à la clé? (Je sais que l'itération fonctionne).

Merci!

+2

Je ne suis pas sûr de comprendre - pourquoi '$ {recordForm.map ['records.key']}' ne fonctionne pas? – McDowell

Répondre

4

Cela devrait fonctionner. Votre problème se situe ailleurs. Soit vous n'utilisez pas le code que vous pensez être, soit vous avez changé le code original "trop" pour avoir posté cette question et cela est devenu correct par coïncidence.

[Modifier] Comme un anwer sur votre commentaire ci-dessous: cela fonctionne certainement. J'ai même créé un rapide n-sale SSCCE pour vous (rapide-n-sale comme dans: en utilisant scriptlets pendant que vous ne devriez pas faire cela en vrai code -java appartient dans une classe java):

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@page import="java.util.Map"%> 
<%@page import="java.util.HashMap"%> 

<% 
    // NOTE: this code belongs (in)directly in a Servlet class. 
    Map<String, Object> map = new HashMap<String, Object>(); 
    map.put("foo.bar", "fubar"); 
    map.put("beh.moo", 1234567); 
    request.setAttribute("map", map); 
%> 

<html> 
    <head><title>test</title></head> 
    <body> 
     <p>Access map values by key: ${map['foo.bar']} ${map['beh.moo']}</p> 

     <p>Iterate over map values: 
      <c:forEach items="${map}" var="entry"> 
       <br>${entry.key} = ${entry.value} 
      </c:forEach> 
     </p> 
    </body> 
</html> 

Cela fonctionne parfaitement.

+0

Je ne suis pas sûr du tout. J'ai remarqué que le champ 'map' auquel je veux accéder étend également HashMap . Peut-être que cela pourrait expliquer pourquoi cela ne fonctionne pas. – Manuel

Questions connexes