Как заменить возврат каретки на <br />, используя freemarker и spring? - PullRequest
10 голосов
/ 17 июня 2011

У меня есть интернационализированное приложение, которое использует пружину и freemarker. Я получаю контент из локализованных файлов свойств, используя.

${rc.getMessage("help.headings.frequently_asked_questions")}

Для некоторого содержимого в значениях свойств есть возврат каретки. Поскольку я отображаю на веб-странице, я хотел бы заменить их на
.

Каков наилучший способ сделать это?

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

Есть ли лучший способ объявить свойства, чтобы они знали, что они многострочные?

help.faq.answer.new_users=If you have not yet set a PIN, please enter your username and passcode (from your token) in the boxes provided and leave the PIN field blank.\
You will be taken through the steps to create a PIN the first time you log in.

Cheers, Пит

Ответы [ 5 ]

13 голосов
/ 17 июня 2011

${springMacroRequestContext.getMessage("help.headings.frequently_asked_questions", [], "", false)?html?replace("\n", "<br>")}

2 голосов
/ 06 сентября 2018

Чтобы обработать окончания строк CR + LF (возврат каретки + перевод строки), а также просто LF, сделайте следующее:

<#escape x as x?html?replace("\\r?\\n","<br />",'r')>...</#escape>
2 голосов
/ 28 февраля 2013
<#escape x as x?html?replace('\n', '<br>')>...</#escape>

работает просто отлично.

Если вы хотите, чтобы это было поведение по умолчанию, рассмотрите возможность написания пользовательского TemplateLoader, как предлагается в этом блоге: http://watchitlater.com/blog/2011/10/default-html-escape-using-freemarker/.

1 голос
/ 22 июня 2011

Что касается

Есть ли лучший способ объявить свойства, чтобы они знали, что они многострочные?

часть вашего вопроса, может быть, это поможет: вы можете включить символы конца строки в значения вашего свойства, используя escape-последовательности \r и \n, как это объяснено в документации API java.util.Properties#load(java.io.Reader) .

0 голосов
/ 17 июня 2011

Я бы порекомендовал написать для него специальную директиву (см. freemarker.template.TemplateDirectiveModel), поэтому в ваших шаблонах вы можете написать что-то вроде <@my.textAsHtml springMacroRequestContext.getMessage(...) />.Важно, что это директива, а не функция, поэтому она правильно работает внутри <#escape x as x?html>...</#escape>.В противном случае это будет двойной выход.Использование директивы также может дать наивысшую производительность, поскольку вы можете напрямую отправлять вывод на выход Writer, вместо того, чтобы сначала создавать String.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...