Ответ 1
Это должно печатать ${person.name}:
${r"${person.name}"}
Я пытаюсь использовать Freemarker в сочетании с шаблонами jQuery.
Обе структуры используют значки доллара/фигурные скобки для идентификации выражений для подстановки (или, как их называют в freemarker, "интерполяции" ), например. ${person.name}
.
Итак, когда я определяю шаблон jQuery с выражениями в этом синтаксисе, Freemarker пытается их интерпретировать (и терпит неудачу).
Я пробовал различные комбинации ускорения последовательности ${
, чтобы передать ее через Freemarker безрезультатно - \${
, \$\{
, $\{
и т.д.
Вставка комментария freemarker между долларом и курсивом (например, $<#-- -->{expression}
) DOES работает, но я ищу более сжатое и элегантное решение.
Есть ли более простой способ получить шаблон Freemarker для вывода последовательности символов ${
?
Это должно печатать ${person.name}:
${r"${person.name}"}
Для более длинных разделов без разметки 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 перед обработкой файла.
Смотрите также:
Другой вариант - использовать #include с параметром parse = false. То есть, разместите ваши шаблоны jQuery на отдельной странице include и используйте parse = false, чтобы freemarker не пытался и не анализировал его.
Это будет хорошим вариантом, если шаблоны больше и содержат двойные кавычки.
Если ${
- единственная проблема, вы можете использовать альтернативный синтаксис в плагине jQuery Templates следующим образом: {{= person.name}}
Может быть, немного чище, чем ускользнуть от него.
Вы попробовали $$
?
Я нашел в руководстве Freemarker, что ${r"${person.name}"}
распечатает ${person.name}
, не пытаясь его отобразить.
Возможно, вы также должны взглянуть на Freemarker, избегающий freemarker
Мне пришлось потратить некоторое время, чтобы выяснить следующие сценарии, чтобы избежать $ {expression} -
<#assign var = r "$ {expression}">
<a href="/user/${r"${expression}"}"> Some link </a>
<#assign x = "что-то &" +r "$ {выражение}"/>
В случае, если вы хотите использовать неровные строки, чтобы избежать двойных кавычек, апострофов и т.д., вы можете сделать следующее:
Представьте, что вы хотите использовать строку строки ${Hello} - "Друг друга" внутри строки. Вы не можете сделать это с помощью сырых строк. То, что я использовал, работает:
${"\x0024{Hello}-\"My friend friend\""}
Я не избежал апострофа, так как использовал двойные кавычки.
Я могу подтвердить, что
${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>