Как заменить возврат каретки с помощью freemarker и spring?
у меня есть интернационализированное приложение, которое использует spring и freemarker. Я получаю контент из локализованных файлов свойств, используя.
${rc.getMessage("help.headings.frequently_asked_questions")}
для некоторого содержимого в значениях свойств есть возврат каретки. Поскольку я отображаю на веб-странице, Я хотел бы заменить их на
.
каков наилучший способ сделать это?
Edit: при ближайшем рассмотрении кажется, что у меня на самом деле нет возврата каретки в файлах свойств. Свойства возвращаясь в виде однострочных строк.
есть ли лучший способ объявить свойства, чтобы они знали, что они многострочные?
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.
Ура, Пит!--3-->
5 ответов
${springMacroRequestContext.getMessage("help.headings.frequently_asked_questions", [], "", false)?html?replace("\n", "<br>")}
как
есть ли лучший способ объявить свойства, чтобы они знали, что они многострочные?
часть вашего вопроса, возможно, это поможет: вы можете включить символы Терминатора строки в свои значения свойств, используя \r
и \n
escape-последовательности, как это описано в API документация java.util.Properties#load(java.io.Reader)
.
<#escape x as x?html?replace('\n', '<br>')>...</#escape>
работает просто отлично.
Если вы хотите, чтобы это было поведение по умолчанию, подумайте о написании пользовательского TemplateLoader, как предложено в этом блоге:http://watchitlater.com/blog/2011/10/default-html-escape-using-freemarker/.
для обработки окончаний линии CR + LF (возврат каретки + подача линии), а также просто LF сделайте это:
<#escape x as x?html?replace("\r?\n","<br />",'r')>...</#escape>
Я бы рекомендовал написать для него пользовательскую директиву (см. freemarker.template.TemplateDirectiveModel
), поэтому в ваших шаблонах вы можете написать что-то вроде <@my.textAsHtml springMacroRequestContext.getMessage(...) />
. Важно, что это директива, а не функция, поэтому она работает правильно внутри <#escape x as x?html>...</#escape>
. В противном случае это был бы двойной побег. Использование директивы также может дать максимальную производительность, так как вы можете напрямую отправить вывод на выход Writer
, а не строить String
первый.