el - concatenar - ¿Cómo generar ${expresión} en Freemarker sin que se interprete?
freemarker string parameter (7)
Estoy tratando de usar Freemarker junto con las plantillas jQuery.
Ambos marcos usan signos de dólar / llaves para identificar expresiones para la sustitución (o como se llaman en freemarker, "interpolaciones"), por ejemplo, ${person.name}
.
Entonces, cuando defino una plantilla jQuery con expresiones en esa sintaxis, Freemarker intenta interpretarlas (y falla).
He intentado varias combinaciones de escapar de la secuencia ${
para pasarla a través de Freemarker sin éxito - /${
, /$/{
, $/{
, etc.
Insertar un comentario de marca libre entre el dólar y la moneda (por ejemplo, $<#-- -->{expression}
) SÍ funciona, pero estoy buscando una solución más concisa y elegante.
¿Existe una forma más sencilla de obtener una plantilla de Freemarker para generar la secuencia de caracteres ${
?
¿Intentaste $$
?
Encontré en el manual de Freemarker que ${r"${person.name}"}
imprimirá ${person.name}
sin intentar procesarlo.
Quizás también deberías echar un vistazo a Freemarker escapando freemarker
Además, si tiene secciones más largas sin marca de FreeMarker, puede usar <#noparse>...</#noparse>
.
Si tiene este problema mucho, desde FreeMarker 2.3.28 puede configurar FreeMarker para usar [=exp]
lugar de ${exp}
, configurando la configuración interpolation_syntax
en square_bracket
(en la API de Java: Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.SQUARE_BRACKET_INTERPOLATION_SYNTAX)
). Entonces ${exp}
es solo texto estático para FreeMarker. No confunda esta configuración con la configuración tag_syntax
, que también puede tener square_bracket
valor de square_bracket
, pero es independiente de la sintaxis de interpolación (pero es posible que prefiera configurar ambos con el square_bracket
). Ver también: https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html
En el caso de que desee utilizar cadenas sin formato para que pueda evitar comillas dobles, apóstrofes, etc., puede hacer lo siguiente:
Imagina que quieres usar la cadena $ {Hola} - "El amigo de mi amigo" dentro de una cadena. No puedes hacer eso con cuerdas en bruto. Lo que he usado que funciona es:
${"/x0024{Hello}-/"My friend''s friend/""}
No he escapado del apóstrofe desde que usé comillas dobles.
Esto debería imprimir $ {person.name}:
${r"${person.name}"}
Otra opción es usar #include con la opción parse = false. Es decir, coloque sus Plantillas jQuery en la página de inclusión separada y use parse = false para que freemarker no lo intente y analice.
Esta sería una buena opción cuando las plantillas son más grandes y contienen comillas dobles.
Puedo confirmar que el
${r"${item.id}"}
Es la forma correcta como ejemplo.
Así que un ejemplo completo se verá como
<span><a href="/user/user-remove/${r"${item.id}"}"> Remove </a></span>
y la salida será:
<span><a href="/user/user-remove/${item.id}"> Remove </a></span>
Si ${
es su único problema, entonces podría usar la sintaxis alternativa en el complemento de plantillas de jQuery así: {{= person.name}}
Tal vez un poco más limpio que escapar de él.