提问者:小点点

Freemarker -设置并获取空字符串形式的变量名


根据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)

我还尝试了<code>${“”}</code>,方法是分配空变量,但它忽略分配的值:

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

通常在映射中,我可以分配一个带有空字符串的变量并获取它。


共1个答案

匿名用户

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

请注意,语法不是"${"变量名"}",而是更通用的"${"表达式"}",因此您可以编写${x 1},甚至${1 1}(其中根本没有变量引用)。因此${}包含一个空表达式(无效),而不是任何类型的变量引用。