java - Freemarker 迭代映射中返回不需要的值

标签 java freemarker

迭代 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/

相关文章:

java - 如何让我的删除功能删除包含我输入内容的整行,而不是仅删除我输入的内容?

java - 此版本的ChromeDriver仅支持Chrome版本99当前浏览器版本为98.0.4758.102

java - 我的自定义订单按条件查询/jpql

java - 使用 FreeMarker 流式传输巨大列表,内存不足异常

java - Freemarker 将哈希值转换为字符串

java - Freemarker:如何将XML放入数据模型中?

java - 如何在 freemarker 中使用 roundingMode?

java - 不同包导入错误

Java 导入/导出依赖项

java - Freemarker 迭代对象的 ArrayList 并访问变量?