web-dev-qa-db-fra.com

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 à partir 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 le faire directement, mais vous pouvez écrire des fonctions personnalisées qui vous permettront d'obtenir le résultat souhaité. Comment résolvez-vous cela dans Freemarker? Est-ce la même chose avec l'écriture de fonctions personnalisées? Ou existe-t-il un moyen d'appeler réellement ce genre de fonction?

42
Graham

FreeMarker permet d'appeler des méthodes qui ont été rendues disponibles via le modèle depuis l'intérieur expressions .

En supposant que votre objet a été exposé en tant que myBean, vous pouvez appeler la méthode comme suit:

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

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

36
ChssPly76

Comme ChssPly76 l'a dit, vous pouvez simplement effectuer l'appel de méthode à partir d'un modèle Freemarker, tant que vous exposez l'objet dans le modèle.

Mais il est important de garder à l'esprit que si votre méthode retourne NULL (pour une raison quelconque), vous obtiendrez une confusion

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

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

En savoir plus sur la façon dont Freemarker gère les valeurs nulles ici: http://freemarker.org/docs/dgui_template_exp.html#dgui_template_exp_missing

22
monzonj