Freemarker 能够使用以下方式进行文本转义:
<#escape x as x?html>
Foo: ${someVal}
Bar: ${someOtherVal}
</#escape>
xml、xhtml 和 html 都内置在转义符中。有没有办法注册一个自定义的书面转义符?我想生成 CSV 并让每个单独的元素转义,这似乎是一个很好的机制。
如果这也很重要,我正在尝试在 Struts 2 中执行此操作。
Freemarker 能够使用以下方式进行文本转义:
<#escape x as x?html>
Foo: ${someVal}
Bar: ${someOtherVal}
</#escape>
xml、xhtml 和 html 都内置在转义符中。有没有办法注册一个自定义的书面转义符?我想生成 CSV 并让每个单独的元素转义,这似乎是一个很好的机制。
如果这也很重要,我正在尝试在 Struts 2 中执行此操作。
您似乎在这里混淆了两个概念。?xml、?xhtml 和 ?html 是内置字符串。
<#escape>
OTOH 是语法糖,可让您免于一遍又一遍地键入相同的表达式。它可以与任何表达式一起使用,不限于内置。
也就是说,不幸的是,没有内置的 csv 字符串转义,并且如果不修改 FreeMarker 源代码就无法编写自己的代码(尽管如果您确实想这样做,这非常简单 - 看看freemarker.core.BuiltIn
)。也许您可以使用 ?replace 使用正则表达式,或者只是编写/公开适当的方法并在您的模板中调用它。
HtmlEscaper的 Javadoc指示如何在代码中实例化/注册它(参见标题),所以我怀疑如果您实现自己的TemplateTransformModel并以类似的方式注册它,那么应该可以工作。