Подтвердить что ты не робот

Как вывести ${выражение} в Freemarker без его интерпретации?

Я пытаюсь использовать Freemarker в сочетании с шаблонами jQuery.

Обе структуры используют значки доллара/фигурные скобки для идентификации выражений для подстановки (или, как их называют в freemarker, "интерполяции" ), например. ${person.name}.

Итак, когда я определяю шаблон jQuery с выражениями в этом синтаксисе, Freemarker пытается их интерпретировать (и терпит неудачу).

Я пробовал различные комбинации ускорения последовательности ${, чтобы передать ее через Freemarker безрезультатно - \${, \$\{, $\{ и т.д.

Вставка комментария freemarker между долларом и курсивом (например, $<#-- -->{expression}) DOES работает, но я ищу более сжатое и элегантное решение.

Есть ли более простой способ получить шаблон Freemarker для вывода последовательности символов ${?

4b9b3361

Ответ 1

Это должно печатать ${person.name}:

${r"${person.name}"}

Ответ 2

Для более длинных разделов без разметки FreeMarker используйте <#noparse>...</#noparse>.

Начиная с FreeMarker 2.3.28, настройте FreeMarker для использования синтаксиса в квадратных скобках ([=exp]) вместо синтаксиса скобок (${exp}), установив для параметра конфигурации interpolation_syntax значение square_bracket.

Обратите внимание, что в отличие от синтаксиса тега, синтаксис интерполяции не может быть указан внутри шаблона. Изменение синтаксиса интерполяции требует вызова Java API:

Configuration cfg;
// ...
cfg.setInterpolationSyntax(SQUARE_BRACKET_INTERPOLATION_SYNTAX);

Тогда FreeMarker будет считать ${exp} статическим текстом.

Не путайте синтаксис интерполяции с синтаксисом тега, который также может иметь значение square_bracket, но не зависит от синтаксиса интерполяции.

При использовании файла PreProcessor (FMPP) на основе FreeMarker настройте параметр через config.fmpp или в командной строке, например:

fmpp --verbose --interpolation-syntax squareBracket ...

Это вызовет соответствующий API Java перед обработкой файла.

Смотрите также:

Ответ 3

Другой вариант - использовать #include с параметром parse = false. То есть, разместите ваши шаблоны jQuery на отдельной странице include и используйте parse = false, чтобы freemarker не пытался и не анализировал его.

Это будет хорошим вариантом, если шаблоны больше и содержат двойные кавычки.

Ответ 4

Если ${ - единственная проблема, вы можете использовать альтернативный синтаксис в плагине jQuery Templates следующим образом: {{= person.name}}

Может быть, немного чище, чем ускользнуть от него.

Ответ 5

Вы попробовали $$?

Я нашел в руководстве Freemarker, что ${r"${person.name}"} распечатает ${person.name}, не пытаясь его отобразить.

Возможно, вы также должны взглянуть на Freemarker, избегающий freemarker

Ответ 6

Мне пришлось потратить некоторое время, чтобы выяснить следующие сценарии, чтобы избежать $ {expression} -

  • В назначении Freemarker:

<#assign var = r "$ {expression}">

  • В атрибуте html:

<a href="/user/${r"${expression}"}"> Some link </a>

  • В конкатенации Freemarker:

<#assign x = "что-то &" +r "$ {выражение}"/>

Ответ 7

В случае, если вы хотите использовать неровные строки, чтобы избежать двойных кавычек, апострофов и т.д., вы можете сделать следующее:

Представьте, что вы хотите использовать строку строки ${Hello} - "Друг друга" внутри строки. Вы не можете сделать это с помощью сырых строк. То, что я использовал, работает:

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

Я не избежал апострофа, так как использовал двойные кавычки.

Ответ 8

Я могу подтвердить, что

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

является правильным способом в качестве примера.

Итак, какой-то полный пример будет выглядеть как

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

и вывод будет:

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