要解释Freemarker文档常见问题解答,
不能在 myMap[key] 表达式中使用非字符串键。您可以使用方法!
因此,您可以创建一个bean,它为您提供了一种访问Java EnumMap的方法(即)。然后,只需使用映射实例化此 Bean,并将该 Bean 放入模型中。
class EnumMap
{
HashMap<MyEnum, String> map = new HashMap<MyEnum, String>();
public String getValue(MyEnum e)
{
return map.get(e);
}
..constructor, generics, getters, setters left out.
}
我对你试图实现的总体目标有点困惑。如果您只需要列出枚举的值(或者可能是每个枚举的显示值)。有一种更简单的方法可以做到这一点。
我看到这个问题解决的一种方法是在Enum实例上放置一个显示值。
即
enum MyEnum
{ FOO("Foo"),
BAR_EXAMPLE("Bar Example");
private String displayValue;
MyEnum(String displayValue)
{
this.displayValue = displayValue;
}
public String getDisplay()
{
return displayValue;
}
}
这允许您将枚举本身放入配置中,并循环访问所有实例。
SimpleHash globalModel = new SimpleHash();
TemplateHashModel enumModels = BeansWrapper.getDefaultInstance().getEnumModels();
TemplateHashModel myEnumModel = (TemplateHashModel) enumModels.get("your.fully.qualified.enum.MyEnum");
globalModel.put("MyEnum", myEnumModel);
freemarkerConfiguration.setAllSharedVariables(globalModel);
然后,您可以迭代枚举,
<#list MyEnum?values as item>
${item.display}
</#list>