Freemarker - 将变量名设置和获取为空字符串

Posted

技术标签:

【中文标题】Freemarker - 将变量名设置和获取为空字符串【英文标题】:Freemarker - Set and get variable name as empty string 【发布时间】:2018-11-27 01:34:28 【问题描述】:

根据freemarker FAQ,我可以无限制地使用任何变量名:

FreeMarker 对变量名中使用的字符没有限制,对变量名的长度也没有限制

如何在 freemarker 中将变量名定义为空字符串并将其引用为

$ 

例外:

freemarker.core.ParseException: Syntax error in template "test.ftlh" in line 1, column 4:
Encountered "", but was expecting one of:
    <STRING_LITERAL>
    <RAW_STRING>
    "false"
    "true"
    <INTEGER>
    <DECIMAL>
    "."
    "+"
    "-"
    "!"
    "["
    "("
    ""
    <ID>
    at freemarker.core.FMParser.generateParseException(FMParser.java:5749)
    at freemarker.core.FMParser.jj_consume_token(FMParser.java:5608)
    at freemarker.core.FMParser.UnaryExpression(FMParser.java:658)
    at freemarker.core.FMParser.MultiplicativeExpression(FMParser.java:768)
    at freemarker.core.FMParser.AdditiveExpression(FMParser.java:720)
    at freemarker.core.FMParser.RangeExpression(FMParser.java:900)
    at freemarker.core.FMParser.RelationalExpression(FMParser.java:848)
    at freemarker.core.FMParser.EqualityExpression(FMParser.java:811)
    at freemarker.core.FMParser.AndExpression(FMParser.java:967)
    at freemarker.core.FMParser.OrExpression(FMParser.java:989)
    at freemarker.core.FMParser.Expression(FMParser.java:548)
    at freemarker.core.FMParser.StringOutput(FMParser.java:1522)
    at freemarker.core.FMParser.MixedContentElements(FMParser.java:3721)
    at freemarker.core.FMParser.Root(FMParser.java:4411)
    at freemarker.template.Template.<init>(Template.java:252)
    at freemarker.cache.TemplateCache.loadTemplate(TemplateCache.java:549)
    at freemarker.cache.TemplateCache.getTemplateInternal(TemplateCache.java:439)
    at freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:292)
    at freemarker.template.Configuration.getTemplate(Configuration.java:2654)
    at freemarker.template.Configuration.getTemplate(Configuration.java:2503)
    at com.FreemarkerTest.main(FreemarkerTest.java:46)

我也通过分配空变量尝试$"",但它忽略了分配的值:

<#assign  ""="aa">
$""

通常在地图中我可以用空字符串分配一个变量并获取它。

【问题讨论】:

【参考方案1】:

虽然允许使用所有类型的变量名(至少在数据模型中),但它们不一定便于引用。在这种情况下,你必须写$.vars['']

注意语法不是"$" VariableName "",而是更通用的"$" Expression "",所以你可以写$x + 1,甚至$1 + 1(根本没有变量引用)。因此$ 包含一个空的表达式(无效),而不是任何类型的变量引用。

【讨论】:

以上是关于Freemarker - 将变量名设置和获取为空字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何判断 Tasker 变量是未设置、空字符串还是非空字符串

如果 Freemarker 中不存在 XML 节点,则分配空字符串

动态 Freemarker 变量名

freemarker合并单元格,ifelse标签的使用,null空字符串处理

Freemarker 模板语言中的变量名

js中如何判断字符串为空字符串?