Freemarker - 将变量名称设置和获取为空字符串
Freemarker - Set and get variable name as empty string
根据freemarker FAQ,我可以无限制地使用任何变量名:
FreeMarker has no limitations regarding the characters used in variable names, nor regarding the length of the variable names
如何在 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">
${""}
通常在映射中我可以用空字符串分配一个变量并获取它。
虽然允许使用各种变量名(至少在数据模型中),但引用它们不一定方便。在这种情况下,您必须编写 ${.vars['']}
.
注意语法不是"${" VariableName "}"
,而是更通用的"${" Expression "}"
,所以你可以写成${x + 1}
,甚至${1 + 1}
(没有变量引用)在里面)。因此 ${}
包含一个空的 表达式 (无效),而不是任何类型的变量引用。
根据freemarker FAQ,我可以无限制地使用任何变量名:
FreeMarker has no limitations regarding the characters used in variable names, nor regarding the length of the variable names
如何在 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">
${""}
通常在映射中我可以用空字符串分配一个变量并获取它。
虽然允许使用各种变量名(至少在数据模型中),但引用它们不一定方便。在这种情况下,您必须编写 ${.vars['']}
.
注意语法不是"${" VariableName "}"
,而是更通用的"${" Expression "}"
,所以你可以写成${x + 1}
,甚至${1 + 1}
(没有变量引用)在里面)。因此 ${}
包含一个空的 表达式 (无效),而不是任何类型的变量引用。