我在Java中有一些地图
Map<SomeEnum, Boolean> someClassMap = new HashMap <SomeClass, Boolean>();
someClassMap.put(SomeEnum.EXAMPLE_A, true);
etc.
现在在ftl我想创建将从map返回值的函数(ofc由给定的键)
<#function checkAccess someEnumName>
<#list someClassMap?keys as key>
<#if someEnumName== ${key}>
<#return ${someClassMap[key]} >
</#if>
</#list>
</#function>
因此,此代码假设检查函数中的给定参数是否等于来自map的key,然后从map返回该键的值。
不幸的是,我收到了此错误(指向<#if>
和<#return>
:
遇到&#34; {&#34;在第3行,第37行,在functions.ftl中。是 期待以下之一: &#34;&GT;&#34; ... &#34;&#34; ... &#34; [&#34; ... &#34;(&#34; ...... &#34;&#34; ... &#34;!&#34; ... ... &#34; ??&#34; ... &#34; +&#34; ... &#34; - &#34; ... &#34; *&#34; ... &#34; /&#34; ... &#34;%&#34; ... &#34;&GT; =&#34; ... ... &#34;&GT;&#34; ... ... ... ... &#34; ..&#34; ... ... ...
据我所知,我无法返回这样的值,但不幸的是我不知道如何做到这一点。我也试过<#assign ... >
但是出现了同样的错误
答案 0 :(得分:2)
在你的情况下,你将Freemarker标签与插值混合( $ {} ) 调用 $ {x} 时,Freemarker会尝试渲染/打印 x 的字符串值。
所以当你这样做时:
<#if someEnumName== ${key}>
和
<#return ${someClassMap[key]} >
Freemarker将尝试打印${key}
和${someClassMap[key]}
。
Freemarker标签中的混合插值语法不正确,导致Freemarker抱怨 只需删除 $ {} ,您就可以了。
有关详细信息,请参阅以下内容: