2010-08-09 87 views
2

我試圖訪問HashMap中的元素。 這個HashMap的鍵是由Enum定義的。通過Freemarker中的枚舉鍵訪問映射元素

通過文件去之後,我想,爲了能夠訪問的枚舉,我必須把它發送到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不確定...

我想確保我映射電子NUM正確的,所以我嘗試:

${fieldtypes.SEOTEXT} 

這並沒有顯示任何信息,讓我知道它閹了通過,或根本無法打印。

在Java調試,只是在我的根地圖插入TemplateHashModel之前,「fieldTypeModel」充滿了正確的數據...

任何幫助,將不勝感激!

巴特

回答

1

我懷疑你的問題是,通過使用[]語法來訪問你的地圖,你就含蓄地告訴了Freemarker把它當作一個散列。這可能不會像你期望的那樣工作 - 哈希可能代表Map對象,將「size」和「containsKey」等映射到Java方法。相反,嘗試:

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


作爲一個方面說明,我從來沒有試圖通過你所描述的方法訪問枚舉,但還有另一種方式來從不需要的Java代碼模板訪問Java常量,所以下面也應該工作:

${myelement.mymap.get(stack.findValue("@[email protected]"))} 
+1

我試過.get()的例子,但我得到了「mymap.get是未定義的行...」:( – 2011-08-30 08:11:42