我想迭代嵌套在映射中的列表,数据结构如下所示:
Map<Integer, List<Integer>> groups = new TreeMap<>()
// Some code else to put values into groups ...
Freemarker模板:
<#list groups?keys as groupKey>
${groupKey} // It's OK here.
<#list groups[groupKey] as item> // Exception threw here, detail message is pasted below
${item}
</#list>
</#list>
详细异常消息:
FreeMarker模板错误:“...[...]”左操作数:需要序列或字符串或自动转换为字符串的东西(数字、日期或布尔值),但计算结果为extended_hash(包装器:f.t.simplehash):==>groups
那么,问题出在哪里呢?
附言。
我尝试了groups.get(groupKey)
而不是groups[groupKey]
,它会抛出一个新的异常堆栈:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
java.lang.String.compareTo(String.java:108)
java.util.TreeMap.getEntry(TreeMap.java:346)
java.util.TreeMap.get(TreeMap.java:273)
freemarker.template.SimpleHash.get(SimpleHash.java:160)
freemarker.core.Dot._eval(Dot.java:40)
freemarker.core.Expression.eval(Expression.java:76)
原始问题中的问题是FTL的哈希类型不像map
。它是一个“变量”的集合,也就是说,键必须是string
-s。(即使?keys
工作也是Beanswrapper
中的一个小故障...尽管现在它很方便。)由于键是一个数字,FTL假设您想要从序列(列表
或数组)中获取一个项,或者您想要从字符串中获取一个字符,因此产生了原始的错误消息。
解决方案是使用Java API-s,就像dev-an的答案中的get
一样。(从长远来看,FTL意味着引入map类型,所以所有这些非字符串键的问题都将结束,但谁知道什么时候会结束呢...)
更新:从2.3.22开始,就有了?API
来访问对象的Java API,比如mymap?API.get(nonStringKey)
。但是,默认情况下是不允许的(请参见api_builtin_enabled
配置设置以及手册中的更多内容:http://freemarker.org/docs/ref_builtins_expert.html#ref_buitin_api_and_has_api)。还要注意,由于Java映射对数值类型有特殊要求,如果键不是来自Java的整数
,则必须使用mymap?api.get(MyNumericalKey?int)
。
使用JSF 2.0,我需要显示一个表,其中每一行都包含一个打开弹出窗口的链接。我有两种型号:
我的数据结构如下所示: Foo的每个实例都可以包含任意数量的S,这当然反过来又可以包含更多的S等等。那么,我该如何让FreeMarker通过这样的列表呢?
本文向大家介绍Powershell使用嵌套哈希表实例 嵌套哈希表的2种写法例子,包括了Powershell使用嵌套哈希表实例 嵌套哈希表的2种写法例子的使用技巧和注意事项,需要的朋友参考一下 嵌套哈希表对于多维数组是一个更好选择。这种存储方式将更易于管理。请看: 也可以使用这种写法,也许更好: 脚本定义了一个用户,你可以查看一下这个用户的全部信息: 你将更容易获得里面单个信息:
我试图用`stream,特别是嵌套的foreach循环,将以下代码重构为lambda表达式: 我的开头是:
问题内容: Freemarker有两个集合数据类型,即列表和哈希图。有没有一种方法可以像对列表一样遍历哈希图键? 因此,如果我有一个带有数据的变量,则可以说: 我想用其值打印所有用户的属性。这是无效的,但目标很明确: 问题答案: 编辑: 不要在FreeMarker 2.3.25及更高版本中使用此解决方案,尤其是不要使用。查看其他答案。 您使用内置的按键功能,例如,这应该可以工作:
假设我有一个包含集合的对象,所述集合上的每个元素都包含一个集合,每个集合都包含一个集合。 我想在最深的对象上迭代,并对其应用相同的代码。 命令式的方法是微不足道的,但有没有一种方法来完成这一切? 我可以看到如何从最深的循环中生成lambda: 但我能做得更多吗?