Перефразируя Часто задаваемые вопросы по документации Freemarker ,
Нельзя использовать нестроковые ключи в выражении myMap [key].Вы можете использовать методы!
Таким образом, вы можете создать bean-компонент, который предоставит вам способ получить доступ к Java EnumMap (т.е.).Затем просто создайте экземпляр этого bean-компонента с помощью своего mapp и поместите 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>