Java 返回贴图值的Freemarker函数

Java 返回贴图值的Freemarker函数,java,freemarker,Java,Freemarker,我有一些Java地图 Map<SomeEnum, Boolean> someClassMap = new HashMap <SomeClass, Boolean>(); someClassMap.put(SomeEnum.EXAMPLE_A, true); etc. Map someClassMap=newhashmap(); someClassMap.put(SomeEnum.EXAMPLE_A,true); 等 现在在ftl中,我想创建一个

我有一些Java地图

    Map<SomeEnum, Boolean> someClassMap = new HashMap <SomeClass, Boolean>();
    someClassMap.put(SomeEnum.EXAMPLE_A, true);
    etc.
Map someClassMap=newhashmap();
someClassMap.put(SomeEnum.EXAMPLE_A,true);
等
现在在ftl中,我想创建一个函数,该函数将从map返回值(ofc通过给定的键)


所以这段代码假设检查函数中给定的参数是否等于map中的key,然后从map中返回该key的值

不幸的是,我得到了这个错误(它指向

在functions.ftl.Was的第3行第37列遇到“{” 期待以下情况之一: ">" ... "." ... "[" ... "(" ... "?" ... "!" ... ... "??" ... "+" ... "-" ... "*" ... "/" ... "%" ... ">=" ... ... ">" ... ... ... ... ".." ... ...


据我所知,我不能像这样返回值,但不幸的是,我不知道如何做。我也尝试了
,但同样的错误出现了在您的例子中,您将Freemarker标记与插值(${})混合使用。
调用${x}时,Freemarker尝试呈现/打印x的字符串值


所以当你这样做的时候:

<#if someEnumName== ${key}>


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


Freemarker标记中混合插值的语法不正确,导致Freemarker抱怨。
只需删除${}即可

有关更多信息,请参见以下内容:


  • 知道如何使用字符串参数调用该函数吗?
    ${checkAccess(“test”)
    对我不起作用,而且如果我将test分配给变量,并将该变量作为参数函数传递,它就不起作用了。我不确定什么“不起作用”意思是,但我猜这永远不会是真的,因此您永远不会返回任何内容。可能的问题:1.someClassMap?键为空,因此您永远不会使用2来迭代任何内容。someEnumName是字符串,key是SomeEnum。当您比较someEnumName==key时,所做的比较可能是someEnumName==key.toString()这可能不是您所期望的。
    checkAccess(“test”)
    返回一个布尔值,因此
    ${true}
    将打印true,而
    ${false}
    将不打印任何内容。因此,请改为尝试
    ${checkAccess(“test”)?string}
    。请参阅
    <#if someEnumName== ${key}>
    
    <#return ${someClassMap[key]} >