Freemarker - установить и получить имя переменной в виде пустой строки
В соответствии с FAQ по 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)
Я тоже пробовал ${""}
присваивая пустую переменную, но она игнорирует присвоенное значение:
<#assign ""="aa">
${""}
Обычно на карте я могу назначить переменную с пустой строкой и получить ее.
1 ответ
Хотя разрешены все виды имен переменных (по крайней мере, в модели данных), к ним не всегда удобно обращаться. В этом случае вы должны были написать ${.vars['']}
,
Обратите внимание, что синтаксис не "${" VariableName "}"
, но более общий "${" Expression "}"
, так что вы можете написать такие вещи, как ${x + 1}
, или даже ${1 + 1}
(нет ссылки на переменную вообще). таким образом ${}
содержит пустое выражение (которое недопустимо), а не ссылку на переменную любого вида.