2010-09-28 33 views
3

J'utilise un GSP pour envoyer des emails basés sur le plugin MailService. La fermeture de sendMail passe (parmi d'autres) body(view:..., model:myModel)Comment faire référence indirectement à une variable de modèle GSP Grails, par ex. via .get (...)

Je sais que je peux accéder à chaque élément de la carte myModel en utilisant simplement ${itemName} dans le GSP. Cependant, comme je veux parfois construire le nom de l'objet dynamiquement comme 'item'+i, j'ai besoin d'avoir une méthode environnante pour accéder à la variable.

J'ai déjà essayé ${model.get('item'+i), et ${params.get('item'+i), mais le modèle est nul et params est une carte vide. J'ai également essayé pageScope, mais bien que je puisse accéder à un élément via ${pageScope.itemName, je ne peux pas utiliser ${pageScope.get('item'+i)} parce que pageScope n'est pas une carte.

Il existe probablement plusieurs solutions pour résoudre ce problème; Je serais heureux d'un facile ;-). Une solution que je vois est de passer myModel comme seul paramètre et ensuite toujours utiliser myModel.get(...), mais cela signifierait que j'ai dû changer tous mes GSP existants pour toujours me référer à myModel au lieu d'accéder directement aux éléments (avec des noms fixes); donc s'il y a un moyen de ne pas avoir à changer le modèle transmis au SGP, ce serait mon préféré.

Si quelqu'un pouvait aussi dire quelques mots au sujet de la différence du modèle et params dans ce contexte, ce serait plus utile!

Répondre

6

Je l'ai réussi à l'aide maintenant ${pageScope.getProperty(...)}.

+1

voir aussi http://grails.org/doc/latest/ref/Tag%20Libraries/pageScope.html –

3

Il n'y a pas de portée ou de variable 'modèle'. Au lieu de cela, les objets de la mappe de modèle sont définis en tant qu'attributs de requête pour les rendre disponibles au GSP. C'est une fonctionnalité Spring qui facilite l'accès aux variables dans les JSP en utilisant JSTL et puisque la syntaxe GSP est très similaire à JSTL, elle fonctionne de la même manière dans Grails.

Vous pouvez utiliser ceci:

${request.getAttribute('item'+i)} 

pour accéder aux variables du modèle en utilisant des noms dynamiques.

+0

Ressemble exactement ce que je cherchais, mais il renvoie null dans mon GSP. J'ai regardé $ {request.properties} et n'ai pas trouvé les éléments là; parameterMap est vide. Cependant en utilisant $ {pageScope.item0} j'obtiens définitivement la variable dans le même GSP. Se pourrait-il que mailService n'ajoute pas le modèle aux paramètres de la requête? –