Freemarker 转义 freemarker

Posted

技术标签:

【中文标题】Freemarker 转义 freemarker【英文标题】:Freemarker escaping freemarker 【发布时间】:2010-12-11 02:32:12 【问题描述】:

我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来逃避 freemarker 标签。

如何转义<#list> 标签或$expression

【问题讨论】:

【参考方案1】:

如果您发现 嵌套令人困惑,您也可以使用:$"$"expression

【讨论】:

迄今为止建议的所有替代方案中最好的。令我难以置信的是,没有更简单的方法,例如\$ - 但没有。这是优雅的足够近似......【参考方案2】:

我正在使用alternative syntax 功能。我以 [#ftl] 开始模板并使用此语法。

对于表达式,我使用字符串文字功能:$r"$expression"

【讨论】:

我使用了同样的方法,虽然有点难看但是很有效。如果我使用外部模板的变量来定义生成模板的变量的属性访问,它会变得非常讨厌,它看起来像这样: $r"$entity."$propertyDescriptor.name 并结束鉴于 propertyDescriptor 的名称为“creationDate”,例如 $entity.creationDate。【参考方案3】:

您可以将 FreeMarker 配置为使用 [=exp] 而不是 $exp(自 2.3.28 起),以及 [#...]/[@...] 而不是 <#...>|<@...>,方法是同时设置 interpolation_syntaxtag_syntax 配置设置为 square_bracket(在 Java API 中:Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.SQUARE_BRACKET_INTERPOLATION_SYNTAX)cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX))。然后语法不会与默认语法冲突。

有一个棘手的案例;如果模板以<#ftl> 开头,那么它会将标签语法切换回angle_bracket。为了解决这个问题,只需在其前面添加 [#ftl] 行。

另请参阅:https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html

【讨论】:

【参考方案4】:

如果您想使用非原始字符串来转义双引号、撇号等,您可以执行以下操作:

假设您想在字符串中使用字符串 $Hello-"My friend's friend"。你不能用原始字符串做到这一点。我使用的是:

$"\x0024Hello-\"My friend's friend\""

自从我使用双引号以来,我没有转义撇号。

【讨论】:

以上是关于Freemarker 转义 freemarker的主要内容,如果未能解决你的问题,请参考以下文章

用freemarker 生成word,打开word xml字符非法!这是啥原因?

用freemarker 生成word,打开word xml字符非法!这是啥原因?

freemarker 指令

@spring.url 宏没有转义 HTML

freemarker

freemarker莫名报错