通过Freemarker中的Enum键访问Map元素

时间:2010-08-09 12:46:00

标签: java jsp jstl freemarker

我正在尝试访问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 个答案:

答案 0 :(得分:1)

我怀疑您的问题是通过使用[]语法访问您的地图,您隐含地告诉Freemarker将其视为哈希。这可能不会像您期望的那样工作 - 哈希可能代表Map对象,将'size'和'containsKey'映射到Java方法等等。相反,尝试:

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


作为旁注,我从未尝试通过您描述的方法访问枚举,但是还有另一种方法可以从不需要Java代码的模板访问Java常量,因此以下内容也应该有效:

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