【发布时间】:2013-01-07 16:32:33
【问题描述】:
我有一个从控制器接收 JsonArray (gson) 的 groovy 模板。我想要做的是生成一些 HTML,其中填充了该数组中包含的 JsonObjects 中的一些信息。像这样的东西(为清楚起见进行了简化):
<ul>
#{list items: sections, as:'section'}
<li>${section.getAsJsonObject().get("title").getAsString()}
<ul>
#{list items: section.getAsJsonObject().getAsJsonArray("articles"), as:'article'}
<li><a href="${article.getAsJsonObject().get("url").getAsString()}">${article.getAsJsonObject().get("title").getAsString()}</a></li>
#{/list}
</ul>
</li>
#{/list}
</ul>
我发现必须一直执行整个 getAsJsonWhatever() 非常不方便。你知道替代方案吗?
请记住,以下不是我要寻找的答案:
- 将 json 发送到客户端并使用 javascript 完成
- 使用控制器中的代码进行操作
- 使用 %{ }% 标签内的代码来实现
- 将 json 对象转换为控制器中的 java 对象并将其传递给模板(不过这是我最喜欢的替代方法)
编辑:解决方案
这就是应用 Seb 的解决方案后的结果:
控制器:
Object json = slurper.parseText(response.getString());
render(json);
模板:
<ul>
#{list items: json.data.publication.sections, as:'section'}
<li>${section.title}
<ul>
#{list items: section.articles, as:'article'}
<li><a href="${article.url}">${article.title}</a></li>
#{/list}
</ul>
</li>
#{/list}
</ul>
【问题讨论】:
-
只是好奇,为什么是 JSON?为什么不只是 Java 对象?
-
因为 json 来自我对控制器中不同 API 的请求,我认为也许 groovy 会有一些很酷的方法来处理这些,所以我不需要转换将 json 对象传递给控制器中的 java 对象,并将 java 对象传递给模板。
-
我会将其重写为控制器上的 Java 对象。
标签: json groovy playframework gson playframework-1.x