【问题标题】:Accessing Map elements via Enum key in Freemarker在 Freemarker 中通过 Enum 键访问 Map 元素
【发布时间】: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' 填充了正确的数据...

任何帮助将不胜感激!

巴特

【问题讨论】:

    标签: java jsp jstl freemarker


    【解决方案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...” :(
    猜你喜欢
    • 2016-08-09
    • 2010-12-05
    • 2012-12-08
    • 2022-01-16
    • 1970-01-01
    • 2021-10-30
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多