迭代地图时<#list map?keys as key>${key}</#list>
将返回clone,1,getKey,5等
任何人都有解决方案,而不是一一消除不必要的价值?
最佳答案
如果我很了解,那么您会混合使用方法和键。这取决于object_wrapper
配置设置(Configuration.setObjectWrapper(ObjectWrapper)
)。如果将BeansWrapper
用作object_wrapper
(与从未出现此问题的DefaultObjectWrapper
相对),则可以通过yourBeansWrapper.setSimpleMapWrapper(true)
防止这种情况。但是,在该项目中使用false
并非偶然。 FreeMarker语言没有地图类型,这是一个问题。它有一个称为哈希的东西,并且仅支持字符串键(子变量)。因此,人们可能只使用java.util.Map
-s的Java API而不是像[]
,?keys
之类的哈希运算符,并且需要setSimpleMapWrapper(false)
,否则您将看不到Map
方法。然后,您应该写map.keySet()
。
更新:在2.3.22及更高版本中,没有人被迫再使用混合的方法和键(即使在那时也是一个相当混乱的解决方法),因为Java方法(和Java Bean属性)可以通过,例如?api
,myMap?api.get(nonStringKey)
等。因此,您可以使用仅公开myMap?api.keySet()
键并支持ObjectWrapper
功能(最好是Map
)的?api
,启用object_wrapper=DefaultObjectWrapper(2.3.22)
(?api
;默认情况下不允许使用反向安全性),然后在需要Java API名称空间中的内容时使用api_builtin_enabled=true
,否则使用?api
,[]
等(如果您的?keys
键是Map
-s。