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 ${
?
7 réponses
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
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.
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.
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
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.
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>