迭代 map 时
<#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 语言没有 map 类型,这是一个问题。它有一个叫做散列的东西,并且只支持字符串键(子变量)。因此人们可能只使用 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()
等因此,您可以使用仅公开 Map
键并支持 ?api
功能的 ObjectWrapper
(最好是 object_wrapper=DefaultObjectWrapper(2.3 .22)
),启用 ?api
(api_builtin_enabled=true
;默认情况下不允许向后安全),然后只需使用 ?api
当您需要 Java API 命名空间中的某些内容时,如果您的 Map
键是,则使用 []
、?keys
等字符串
-s。
关于java - Freemarker 迭代映射中返回不需要的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12985441/