迭代地图时

<#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属性)可以通过,例如?apimyMap?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。

09-30 15:49
查看更多