Реализовать пользовательский Escaper во Freemarker
Freemarker имеет возможность экранировать текст, используя что-то вроде этого:
<#escape x as x?html>
Foo: ${someVal}
Bar: ${someOtherVal}
</#escape>
xml, xhtml и html все встроены в escapers. Есть ли способ зарегистрировать пользовательский переводчик? Я хочу сгенерировать CSV, чтобы каждый отдельный элемент избежал, и это похоже на хороший механизм.
Я пытаюсь сделать это в Struts 2, если это также имеет значение.
2 ответа
Вы, кажется, путаете две концепции здесь.?xml,?xhtml и?html являются встроенными строками.<#escape>
OTOH - это синтаксический сахар, который избавляет вас от необходимости вводить одно и то же выражение снова и снова. Его можно использовать с любым выражением, оно не ограничено встроенными модулями.
Тем не менее, к сожалению, нет встроенного для экранирования строки csv, и нет способа написать свой собственный, не изменяя исходный код FreeMarker (хотя, если вы действительно хотите пойти по этому пути, это довольно просто - взгляните на freemarker.core.BuiltIn
). Возможно, вы можете с помощью? Заменить с помощью регулярных выражений или просто написать / выставить соответствующий метод и вызвать его в своем шаблоне.
Javadoc для HtmlEscaper указывает, как создать / зарегистрировать это в коде (см. Заголовок), поэтому я подозреваю, что если вы реализуете свой собственный TemplateTransformModel и зарегистрируете его аналогичным образом, то это должно работать.