Реализовать пользовательский 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 и зарегистрируете его аналогичным образом, то это должно работать.

Другие вопросы по тегам