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_syntax
和tag_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字符非法!这是啥原因?