Comment appeler les méthodes java sur un objet à partir d'un modèle FreeMarker?

est-il possible d'appeler une méthode qui prend des paramètres d'un modèle Freemarker?

j'ai un modèle d'objet que j'essaie de rendre avec Freemarker dans une page web. L'un des objets a une méthode pour obtenir une sous-liste de son contenu, en prenant un paramètre qui est utilisé pour filtrer la liste:

public List getunits(final String type);

je sais que dans JSP vous ne pouvez pas faire cela directement, mais vous pouvez écrire des fonctions personnalisées qui vous permettront d'atteindre le résultat que vous voulez. Comment faites-vous résoudre ça à Freemarker? Est-ce la même chose avec l'écriture de fonctions personnalisées? Ou y a-t-il un moyen d'appeler ce genre de fonction?

40
demandé sur Graham 2009-09-01 16:55:32

2 réponses

FreeMarker permet d'invoquer des méthodes qui ont été rendues disponibles par le modèle à partir de expressions.

en Supposant que votre objet a été exposé myBean vous pouvez appeler la méthode comme suit:

<#list myBean.getunits("myType") as unit>
  do stuff with ${unit}
</#list>

Vous n'avez pas à utiliser <list>, bien sûr, c'est juste là comme exemple puisque votre méthode retourne une liste.

34
répondu ChssPly76 2009-09-01 22:43:48

ChssPly76 dit, vous pouvez simplement lancer l'appel de méthode à partir de dans un le template Freemarker, aussi longtemps que vous exposer l'objet dans le modèle.

mais il est important de garder à l'esprit que si votre méthode retourne NULL (pour quelque raison que ce soit), vous allez avoir une confusion

Expression myBean.getunits() is undefined on line ....

pour éviter cela, vous devriez mieux utiliser myBean.getunits(...)! (notez le point d'exclamation).

pour en savoir plus sur la façon dont Freemarker gère les nulls, Cliquez ici: http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing

20
répondu monzonj 2011-01-17 15:02:08