我们的后端正在构建FooCategory
的映射作为键,并且值是Foo
元素的列表。由于控制器将其添加到json
渲染过程的模型中,因此Grails gson
文件如下所示:
model {
List<String> names
Map<FooCategory, List<Foo>> categories
}
json {
names names
categories <<what is the syntax>>
}
经过多次试验,我实际上无法获得对Foo元素列表的有效引用。我想例如生成如下的json
输出:
{
"names": ["name1", "name2"],
"categories": [
{
"name": "category_1",
"fooCount": 5
},
{
"name": "category_5",
"fooCount": 8
}
]
}
下一步将使用Foo
语法将tmpl.templateName(fooElements)
元素的列表传递到模板,但是现在我只是停留在count属性上。任何帮助表示赞赏!
我发现Grails的视图使用tmpl
处理Iterable实体,但是由于Map是不可迭代的,因此我们必须显式调用entrySet()
方法。这里是一个工作版本:
model {
List<String> names
Map<FooCategory, List<Foo>> categories
}
json {
def stats = categories.entrySet().collect { cat ->
[ name: cat.key.name, fooCount: cat.value.size() ]
}
names names
categories stats
}
现在可以将Iterable(categories.entrySet()
)传递给如下所示的模板:
model {
Map.Entry<FooCategory, List<Foo>> entry
}
json {
FooCategory fooCategory = entry.key
List fooElements = entry.value
. . .
}