Доступ к элементам карты с помощью клавиши Enum во Freemarker - PullRequest
2 голосов
/ 09 августа 2010

Я пытаюсь получить доступ к элементам в HashMap.Ключи этой HashMap определены в Enum.

После просмотра документации я решил, что для того, чтобы получить доступ к Enum, я должен отправить его во Freemarker следующим образом:

BeansWrapper wrapper = BeansWrapper.getDefaultInstance();
TemplateHashModel enumModels = wrapper.getEnumModels();
TemplateHashModel fieldTypeModel = (TemplateHashModel)enumModels.get("com.example.MinisiteFieldType");
root.put("fieldtypes", fieldTypeModel);

В моем .ftl я пробовал следующее:

${myelement.mymap[fieldtypes.SEOTEXT]}

Однако я получаю: Выражение myelement.mymap [fieldtypes.SEOTEXT] не определено в строке X ...

Я хотел убедиться, что я правильно отобразил перечисление, поэтому я попытался:

${fieldtypes.SEOTEXT}

Это ничего не печатало, оставляя меня удивленным, прошел ли он, или просто не могло быть напечатано.

В отладке Java, непосредственно перед вставкой TemplateHashModel в мою корневую карту, 'fieldTypeModel' заполняется правильными данными ...

Любая помощь будет оценена!

Барт

1 Ответ

1 голос
/ 19 августа 2010

Я подозреваю, что ваша проблема в том, что, используя синтаксис [] для доступа к вашей карте, вы неявно говорите Freemarker рассматривать ее как хеш. Это может не сработать так, как вы ожидаете - хеш, вероятно, будет представлять объект Map, отображая 'size' и 'containsKey' и так далее в методы Java. Вместо этого попробуйте:

${myelement.mymap.get(fieldtypes.SEOTEXT)}


В качестве примечания, я никогда не пытался получить доступ к перечислениям описанным вами методом, но есть другой способ получить доступ к константам Java из шаблона, который не требует кода Java, поэтому должно работать и следующее:

${myelement.mymap.get(stack.findValue("@com.example.MinisiteFieldType@SEOTEXT"))}
...