1

コントローラーから JsonArray (gson) を受け取るグルーヴィーなテンプレートがあります。私がやりたいことは、その配列に含まれる JsonObjects からの情報の一部で満たされた HTML を生成することです。このようなもの(わかりやすくするために簡略化しています):

<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 を取得すると思います。

json の結果をデフォルトの WS メソッドで変換する代わりに、結果を文字列として取得し、groovy.json.JsonSlurper.parseText メソッドを使用して、groovy テンプレートで標準オブジェクトとして使用できる groovy オブジェクトを取得できます。

これが私のテンプレートの1つで行うことです

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

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