如何在自由标记器中使用名称中带有破折号的变量



我正在尝试渲染一个包含减号(例如名字(的键的地图,例如:

<head><title>Data - ${first-name} </title>

当我使用 FreeMarker 渲染它时,它会抱怨并抛出异常。当我从变量名称中删除"-"时,它可以正常工作。

有没有办法在 Groovy 模板文本中转义这些变量?

我这样做的原因是从第三方 API 渲染 JSON blob,在那里我无法控制变量名称。

刚刚检查了自由标记手册。在"检索变量"一章中,您有以下语句:

例如,要读取名称为"data-id"的变量, 表达式是 data\-id,因为 data-id 将被解释为"data minus 同上"。(请注意,这些转义仅适用于标识符,不适用于字符串 文字。

这些类型的表达式在 Freemarker 2.3.23 中工作正常(刚刚测试以验证文档(:

<#if test-dash??>
    ${test-dash}
</#if>

仅当您使用的是 2.3.22 或更高版本的自由标记版本时。请参阅自由标记变量语法:

在这种表达式中,变量名只能包含字母(包括非拉丁字母(、数字(包括非拉丁数字(、下划线 (_(、美元 ($(、at 符号 (@(。此外,第一个字符不能是 ASCII 数字 (0-9(。从 FreeMarker 2.3.22 开始,变量名称还可以包含减号 (-(、点 (.( 和冒号 (:)在任何位置,但这些必须使用前面的反斜杠 (\( 进行转义,否则它们将被解释为运算符。

最新更新