在 Freemarker 中通过 Enum 键访问 Map 元素
Posted
技术标签:
【中文标题】在 Freemarker 中通过 Enum 键访问 Map 元素【英文标题】:Accessing Map elements via Enum key in Freemarker 【发布时间】:2011-03-27 06:54:57 【问题描述】:我正在尝试访问 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 调试中,在我的根 Map 中插入 TemplateHashModel 之前,'fieldTypeModel' 填充了正确的数据...
任何帮助将不胜感激!
巴特
【问题讨论】:
【参考方案1】:我怀疑您的问题是,通过使用 [] 语法访问您的地图,您隐含地告诉 Freemarker 将其视为哈希。这可能不会像您期望的那样工作——散列可能代表 Map 对象,将“大小”和“包含键”等映射到 Java 方法。相反,请尝试:
$myelement.mymap.get(fieldtypes.SEOTEXT)
附带说明一下,我从未尝试过通过您描述的方法访问枚举,但是还有另一种方法可以从不需要 Java 代码的模板中访问 Java 常量,因此以下方法也应该有效:
$myelement.mymap.get(stack.findValue("@com.example.MinisiteFieldType@SEOTEXT"))
【讨论】:
我尝试了 .get() 示例,但我得到“mymap.get is undefined on line...” :(以上是关于在 Freemarker 中通过 Enum 键访问 Map 元素的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux tclsh 中通过光标键获取命令历史记录
100个 Unity小知识点 | C#中通过 数字int值 获取 枚举Enum 中的数值