在 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,并以类似的方式注册它,那应该可以工作。

【讨论】:

我认为&lt;transform&gt; 已被弃用? 我不知道,我承认。当然引用的类似乎不是【参考方案2】:

您似乎在这里混淆了两个概念。 ?xml、?xhtml 和 ?html 是字符串内置&lt;#escape&gt; OTOH 是语法糖,可让您免于一遍又一遍地输入相同的表达式。它可以与 any 表达式一起使用,它不限于内置。

也就是说,不幸的是,没有内置的 csv 字符串转义,并且如果不修改 FreeMarker 源代码就无法编写自己的代码(尽管如果你确实想这样做,它非常简单 - 看看 freemarker.core.BuiltIn) .也许您可以使用 ?replace 使用正则表达式,或者只是编写/公开一个适当的方法并在您的模板中调用它。

【讨论】:

这回答了这个问题。它看起来比它的价值更麻烦。我想我会选择 CSVWriter 路线而不是模板。

以上是关于在 Freemarker 中实现自定义 Escaper的主要内容,如果未能解决你的问题,请参考以下文章

如何在Canvas中实现自定义路径动画

在具有条件的 keras 中实现自定义损失函数

为啥不推荐使用 JScript 在 WiX 中实现自定义操作?

如何在黄瓜中实现自定义监听器?

如何在自定义 Spring 存储库中实现自定义方法? [复制]

在spring boot中实现自定义错误