J'essaie d'utiliser Freemarker en conjonction avec les modèles jQuery.
Les deux cadres utilisent des signes dollar/accolades pour identifier les expressions à substituer (ou comme elles sont appelées dans freemarker, "interpolations"), par exemple. ${person.name}
.
Ainsi, lorsque je définis un modèle jQuery avec des expressions dans cette syntaxe, Freemarker tente de les interpréter (et échoue).
J'ai essayé diverses combinaisons d'échapper à la séquence ${
pour la passer par Freemarker en vain - \${
, \$\{
, $\{
, etc.
Insérer un commentaire de marque de commerce entre le dollar et le bouclé (par exemple, $<#-- -->{expression}
) fonctionne, mais je recherche une solution plus concise et élégante.
Existe-t-il un moyen plus simple d'obtenir un modèle Freemarker pour générer la séquence de caractères ${
?
Cela devrait imprimer $ {person.name}:
${r"${person.name}"}
De même, si vous avez des sections plus longues sans marquage FreeMarker, vous pouvez utiliser <#noparse>...</#noparse>
.
Si vous rencontrez beaucoup de problèmes, depuis FreeMarker 2.3.28, vous pouvez configurer FreeMarker pour qu'il utilise [=exp]
au lieu de ${exp}
, en définissant le paramètre de configuration interpolation_syntax
sur 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 également avoir la valeur square_bracket
, mais est indépendant de la syntaxe d'interpolation (mais vous pouvez préférer définir les deux sur square_bracket
). Voir aussi: https://freemarker.Apache.org/docs/dgui_misc_alternativesyntax.html
Une autre option consiste à utiliser #include avec l'option parse = false. Autrement dit, placez vos modèles jQuery dans la page d'inclusion distincte et utilisez parse = false afin que freemarker n'essaye pas de l'analyser.
Ce serait une bonne option lorsque les modèles sont plus grands et contiennent des guillemets doubles.
Si ${
est votre seul problème, vous pouvez utiliser la syntaxe alternative dans le plug-in 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 essayer de le rendre.
Peut-être devriez-vous également jeter un œil à Freemarker s'échappant de freemarker
J'ai dû passer du temps à comprendre les scénarios suivants pour échapper à $ {expression} -
<#assign var = r "$ {expression}">
<a href="/user/${r"${expression}"}"> Some link </a>
<#assign x = "quelque chose &" + r "$ {expression}" />
Je peux confirmer que le
${r"${item.id}"}
est la bonne façon à titre d'exemple.
Donc, je vais avoir un exemple assez complet
<span><a href="/user/user-remove/${r"${item.id}"}"> Remove </a></span>
et le résultat sera:
<span><a href="/user/user-remove/${item.id}"> Remove </a></span>
Si vous souhaitez utiliser des chaînes non brutes pour pouvoir échapper aux guillemets, aux apostrophes, etc., vous pouvez procéder comme suit:
Imaginez que vous souhaitiez utiliser la chaîne $ {Hello} - "Ami de mon ami" à l'intérieur d'une chaîne. Vous ne pouvez pas faire cela avec des chaînes brutes. Ce que j'ai utilisé qui fonctionne est:
${"\x0024{Hello}-\"My friend's friend\""}
Je n'ai pas échappé à l'apostrophe puisque j'ai utilisé les guillemets doubles.