要对此释义Freemarker文档常见问题,
您不能在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>


