Java 返回贴图值的Freemarker函数
我有一些Java地图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中,我想创建一个
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]} >