1

我有一个从控制器接收 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>
4

1 回答 1

1

我猜你是从 WS 调用中得到你的 json 的。

无需使用默认 WS 方法转换 json 的结果,您可以将结果作为字符串获取,并使用 groovy.json.JsonSlurper.parseText 方法获取 groovy 对象,您可以将其用作 groovy 模板中的标准对象。

这是我在我的一个模板中所做的

%{
def slurper = new groovy.json.JsonSlurper()
def jsonResult = slurper.parseText(response.getString())

if (jsonResult.success) {
    ...
}
}%
于 2013-01-08T09:00:16.843 回答