84 votes

Freemarker itération sur hashmap clés

Freemarker a deux de la collection de types de données, les listes et les hashmaps Est-il possible d'itérer sur hashmap touches, comme nous le faisons avec des listes?

Donc, si j'ai un var avec des données permet de dire:

user : {
  name : "user"
  email : "looser@everything.com"
  homepage : "http://nosuchpage.org"
}

Je voudrais imprimer toutes les propriétés de l'utilisateur avec leur valeur. C'est nul, mais l'objectif est clair:

<#list user.props() as prop>
  ${prop} = ${user.get(prop)}
</#list>

105voto

skaffman Points 197885

Vous utiliser les touches de fonction, par exemple, cela devrait fonctionner:

<#list user?keys as prop>
    ${prop} = ${user.get(prop)}
</#list>

51voto

Nick Spacek Points 1098

Pour info, il semble que la syntaxe pour l'extraction de valeurs a changé selon:

http://freemarker.sourceforge.net/docs/ref_builtins_hash.html

<#assign h = {"name":"mouse", "price":50}>
<#assign keys = h?keys>
<#list keys as key>${key} = ${h[key]}; </#list>

12voto

rees Points 1246

Si vous utilisez un BeansWrapper avec un niveau d'exposition de l'Exposer.COFFRE-fort ou de les Exposer.TOUS, alors le standard de Java approche d'une itération à l'entrée de la valeur peuvent être employées:

Par exemple, le travail dans Freemarker (depuis au moins la version 2.3.19):

<#list map.entrySet() as entry>  
  <input type="hidden" name="${entry.key}" value="${entry.value}" />
</#list>

Dans Struts2, par exemple, une extension de la BeanWrapper est utilisé avec le niveau d'exposition définies par défaut pour permettre cette manière d'itération.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X