10 votes

Comment accéder à une carte en utilisant le système de modèles de playframework (groovy)

J'ai utilisé le - assez excellent - playframework et j'ai eu du mal à trouver de la documentation/des exemples sur la façon d'accéder à une structure de données Map à partir d'une vue, en utilisant le moteur de modèles de play.

Pour être encore plus précis, je souhaite accéder à la carte lorsque j'itère sur une liste d'objets, par exemple,

#{list items:itemList, as:'item'}
 // access the map value using the ${item?.id} as the key
#{/list}

Merci de votre visite.

21voto

oxymesis Points 341

Il s'agit d'un solution générique pour itérer sur Carte en utilisant Play ! Framework :

dans le contrôleur :

render(map);

dans le modèle :

#{list items:map.keySet(), as:'key'}
   ${map.get(key)}
#{/list}

Le fait que vous vouliez compter sur un côté Liste pour itérer sur votre Carte me suggère que vous êtes à la recherche d'un moyen prévisible pour votre processus d'itération.

Dans ce cas, n'oubliez pas que l'itération sera imprévisible si vous n'utilisez pas un système ordonné/trié. Carte mise en œuvre.

  • HashMap vous donne un non trié , non ordonné Carte
  • Cartouche de hachage maintient ordre d'insertion
  • TreeMap est la seule implémentation JDK d'un trié Carte . Par défaut, il vous permet d'itérer en suivant l'ordre d'apparition de l'image. ordre naturel des éléments. Vous pouvez également spécifier un ordre de tri personnalisé et mettre en œuvre la fonction Comparable interface. Cela vous amènera à remplacer la compareTo() méthode.

5voto

Pere Villega Points 13565

En supposant que vous le fassiez dans le contrôleur :

render(map, itemList); //map is a Map

Este devrait travail :

#{list items:itemList, as:'item'}
 // access the map value using the ${item?.id} as the key
 ${map.get(item.?id)}
#{/list}

0voto

Dónal Points 61837

Je ne connais pas le cadre de jeu, mais cela fonctionnerait dans un SGP.

#{list items:itemList, as:'item'}
 ${map[item?.id]}
#{/list}

0voto

Mohammed AlBanna Points 111

Je fais des choses comme ça sur une carte :

*{ Map<User, Integer> shareHolders = ... }*
#{list shareHolders.sort{it.value}.collect {k,v -> k}.reverse(), as:'holder'}
    <tr>
        <td>${holder.name}</td>
        <td>${shareHolders[holder]}</td>
    </tr>
#{/list}

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