在此解释Freemarker Documentation FAQ,
您不能在 myMap[key] 表达式中使用非字符串键。你可以使用方法!
因此,您可以创建一个 bean,为您提供访问 Java EnumMap 的方法(即)。然后只需使用您的 mapp 实例化这个 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;
}
}
这允许您将 Enum 本身放入您的配置中,并遍历所有实例。
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>