2017-09-27 4 views
0

Je n'ai pas utilisé Freemarker avant et hérité de certains modèles qui ne seront pas compilés. J'ai réduit la ligne qui cause des problèmes à:Où sont définies les fonctions Freemarker?

${text('Text and {0}', 'More Text')} 

D'où vient cette fonction text()? Je comprends que c'est essayer de retourner la deuxième chaîne injectée dans le premier comme: "Texte et plus de texte".

Voici l'erreur:

FreeMarker template error: 
For "...(...)" callee: Expected a method, but this has evaluated to an extended_hash (wrapper: f.t.SimpleHash): 

Modernizr-2.6.2.js est le seul javascript importé.

Des idées pour lesquelles cette ligne cause des problèmes et où cette fonction devrait être déclarée ??

Répondre

0

Il peut provenir de quelques endroits:

  • A partir du modèle de données (un des paramètres que vous passez à Template.process)

  • d'une variable partagée, qui est ajouté à la Configuration singleton.

  • D'un #include modèle -d (ou du modèle que vous êtes), par l'intermédiaire #function text ou #assign text = ... (ou #global text = ...)

  • D'un #import modèle -ed via #global text = ... (très peu probable ...)

mais une chose potentiellement intéressante est que l'erreur dit que text existe, mais il est un hachage (une Map -comme chose), pas une chose appelable. Peut-être que quelque chose qui est également appelé text ombres le bon text? Que dit ${.data_model.text('Text and {0}', 'More Text')}?

Vous mentionnez un fichier JavaScript. FreeMarker n'a rien à voir avec JavaScript (et il fonctionne sur le serveur, à l'intérieur de la JVM).

+0

Votre réponse me conduit dans la bonne direction. Fondamentalement, je peux créer un texte() en implémentant TemplateMethodModelEx puis en plaçant cette classe dans le modèle de données (qui, dans mon cas, était un hash-map), qui était votre premier point. Référence: http://freemarker.org/docs/api/freemarker/template/TemplateMethodModelEx.html – MarkP