返回地图值的Freemarker函数

时间:2014-06-25 13:01:50

标签: java freemarker

我在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 ... >但是出现了同样的错误

1 个答案:

答案 0 :(得分:2)

在你的情况下,你将Freemarker标签与插值混合( $ {} ) 调用 $ {x} 时,Freemarker会尝试渲染/打印 x 的字符串值。


所以当你这样做时:

<#if someEnumName== ${key}>

<#return ${someClassMap[key]} >

Freemarker将尝试打印${key}${someClassMap[key]}


Freemarker标签中的混合插值语法不正确,导致Freemarker抱怨 只需删除 $ {} ,您就可以了。

有关详细信息,请参阅以下内容:

  1. Freemarker template structure (Interpolation vs Freemarker tags)
  2. Interpolation (check the section with "Warning!")