Comment afficher ${expression} dans Freemarker sans qu'il soit interprété?

j'essaie D'utiliser Freemarker en conjonction avec jQuery Templates.

les deux cadres utilisent le signe dollar/accolades pour identifier les expressions de substitution (ou comme on les appelle dans freemarker," interpolations"), par exemple ${person.name} .

ainsi quand je définis un modèle de jQuery avec des expressions dans cette syntaxe, Freemarker essaie de les interpréter (et échoue).

j'ai essayé diverses combinaisons d'échapper à la ${ séquence pour le passer par Freemarker en vain - ${ , ${ , ${ , etc.

insérer un commentaire freemarker entre le dollar et le curly (par exemple $<#-- -->{expression} ) fonctionne - mais je suis à la recherche d'une solution plus concise et élégante.

y a-t-il un moyen plus simple d'obtenir un modèle Freemarker pour afficher la séquence de caractères ${ ?

23
demandé sur Glenn Barnett 2011-03-06 02:47:36

7 réponses

cela devrait indiquer $ {personne.nom}:

${r"${person.name}"}
43
répondu javanna 2011-03-05 23:58:42

aussi, si vous avez des sections plus longues sans markup FreeMarker, vous pouvez utiliser <#noparse>...</#noparse> .

si vous avez ce problème beaucoup, depuis FreeMarker 2.3.28 vous pouvez configurer FreeMarker pour utiliser [=exp] au lieu de ${exp} , en définissant le paramètre de configuration interpolation_syntax à square_bracket (dans L'API Java: Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.SQUARE_BRACKET_INTERPOLATION_SYNTAX) ). Alors ${exp} est juste un texte statique pour FreeMarker. Ne confondez pas ce paramètre avec le paramètre tag_syntax , qui peut aussi avoir square_bracket valeur, mais est indépendante de la syntaxe d'interpolation (mais vous pouvez préférer mettre à la fois square_bracket ). Voir aussi: https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html

17
répondu ddekany 2018-04-05 12:29:25

une autre option est d'utiliser #include avec parse=false option. C'est-à-dire, mettez vos gabarits de jQuery dans la page d'inclusion séparée et utilisez parse=false pour que freemarker n'essaie pas de le parser.

ce serait une bonne option lorsque les gabarits sont plus grands et contiennent des guillemets doubles.

4
répondu Rob Bygrave 2011-08-01 12:23:08

si ${ est votre seul problème, alors vous pouvez utiliser la syntaxe alternative dans le plugin jQuery Templates comme ceci: {{= person.name}}

peut-être un peu plus propre que d'y échapper.

3
répondu RP Niemeyer 2011-03-06 02:03:45

avez-vous essayé $$ ?

j'ai trouvé dans le manuel de Freemarker que ${r"${person.name}"} va imprimer ${person.name} sans tenter de le rendre.

peut-être devriez-vous aussi jeter un oeil à Freemarker échapper freemarker

1
répondu adarshr 2017-05-23 12:18:13

dans le cas où vous voulez utiliser des chaînes Non-raw pour échapper aux doubles guillemets, apostrophes, etc, Vous pouvez faire ce qui suit:

Imaginez que vous voulez utiliser la chaîne ${Bonjour}-"l'ami de Mon amie" à l'intérieur d'une chaîne. Tu ne peux pas faire ça avec des cordes crues. Ce que j'ai utilisé qui fonctionne est:

${"\x0024{Hello}-\"My friend's friend\""}

Je n'ai pas échappé à l'apostrophe depuis que j'ai utilisé des guillemets.

0
répondu Jaime Garza 2014-01-15 19:49:33

je peux confirmer que le

${r"${item.id}"}

est le bon exemple.

donc j'ai un exemple assez complet ressemblera à

<span><a href="/user/user-remove/${r"${item.id}"}"> Remove </a></span>

et la sortie sera :

<span><a href="/user/user-remove/${item.id}"> Remove </a></span>
0
répondu JOKe 2015-11-03 09:52:31