在java中,我有一个带有hashmap条目的HashMap,名为" CategoriesDocuments"。我可以使用以下语法在freemarker中调用它:
${CategoriesDocuments}
它由Key / value系统组成。这里的值是再次成为TreeMap条目的类别。此类别在其值中包含路径。
基本上我想访问这些路径。
我尝试的是获得这样的第一个值:
<#list CategoriesDocuments?values as v>
${v}
</#list>
我有一个错误,告诉v必须是数字或字符串,而不是freemarker.ext.beans.SimpleMethodModel。
当我输入$ {CategoriesDocuments}时,我有:
{E010=[F:\Workspace\uploads\E010108_1216.pdf, F:\Workspace\uploads\E010136.pdf, E051=[F:\Workspace\uploads\E051301_0115.pdf], E090=[F:\Workspace\uploads\E090501_0414.pdf],E230=[F:\Workspace\uploads\E230104_1113.pdf]}
E010例如是类别,之后我们有文件的路径。
如何通过迭代在列表上执行某种列表来访问文件?
非常感谢
答案 0 :(得分:0)
我想问题在于FreeMarker的-fdata-sections
配置设置。一些应用程序,尤其是Struts,使用object_wrapper
(不将其BeansWrapper
设置更改为simpleMapWrapper
),这样做true
的Java方法很可怕暴露,并与真正的钥匙混合在一起。就像,Map
将返回CategoriesDocuments.get
方法本身。因此,这样的地图的get(Object)
将包含一些方法,与实际的键混合在一起。如果您无法更改?values
(使用默认值object_wrapper
,建议使用),因为某些模板与该更改不兼容,请尝试通过利用此方法来解决此问题公开了DefaultObjectWrapper
的Java API:Map
此外,FreeMarker实际上无法直接打印类似地图的数据结构。您应该列出它们,然后以您实际需要的格式自己打印键和值。它恰好在你的情况下工作,因为它只调用<#list someMap.values() as value>
,但我不会依赖toString()
的输出,这几乎只适用于Java中的调试。