我正在尝试访问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'填充了正确的数据......
任何帮助将不胜感激!
巴特
答案 0 :(得分:1)
我怀疑您的问题是通过使用[]语法访问您的地图,您隐含地告诉Freemarker将其视为哈希。这可能不会像您期望的那样工作 - 哈希可能代表Map对象,将'size'和'containsKey'映射到Java方法等等。相反,尝试:
${myelement.mymap.get(fieldtypes.SEOTEXT)}
作为旁注,我从未尝试通过您描述的方法访问枚举,但是还有另一种方法可以从不需要Java代码的模板访问Java常量,因此以下内容也应该有效:
${myelement.mymap.get(stack.findValue("@com.example.MinisiteFieldType@SEOTEXT"))}