在 Freemarker 中实现自定义 Escaper
Posted
技术标签:
【中文标题】在 Freemarker 中实现自定义 Escaper【英文标题】:Implement a Custom Escaper in Freemarker 【发布时间】:2010-11-09 20:21:59 【问题描述】:Freemarker 可以使用以下方式进行文本转义:
<#escape x as x?html>
Foo: $someVal
Bar: $someOtherVal
</#escape>
xml、xhtml 和 html 都内置在转义符中。有没有办法注册一个自定义的书面转义符?我想生成 CSV 并转义每个单独的元素,这似乎是一个很好的机制。
如果这也很重要,我正在尝试在 Struts 2 中执行此操作。
【问题讨论】:
【参考方案1】:HtmlEscaper 的 Javadoc 指示如何在代码中实例化/注册它(请参阅标题),所以我怀疑如果您实现自己的 TemplateTransformModel,并以类似的方式注册它,那应该可以工作。
【讨论】:
我认为<transform>
已被弃用?
我不知道,我承认。当然引用的类似乎不是【参考方案2】:
您似乎在这里混淆了两个概念。 ?xml、?xhtml 和 ?html 是字符串内置。<#escape>
OTOH 是语法糖,可让您免于一遍又一遍地输入相同的表达式。它可以与 any 表达式一起使用,它不限于内置。
也就是说,不幸的是,没有内置的 csv 字符串转义,并且如果不修改 FreeMarker 源代码就无法编写自己的代码(尽管如果你确实想这样做,它非常简单 - 看看 freemarker.core.BuiltIn
) .也许您可以使用 ?replace 使用正则表达式,或者只是编写/公开一个适当的方法并在您的模板中调用它。
【讨论】:
这回答了这个问题。它看起来比它的价值更麻烦。我想我会选择 CSVWriter 路线而不是模板。以上是关于在 Freemarker 中实现自定义 Escaper的主要内容,如果未能解决你的问题,请参考以下文章
为啥不推荐使用 JScript 在 WiX 中实现自定义操作?