Grails で Ajax

Grails 1.0-RC3 で Ajax を使ったサンプルを作ってみた。

とりあえず、GrailsAjax を使うには以下のようにすれば良いみたい。

  • gsp ファイル
    • g:javascript を タグ内に追加
    • remoteXXX や formRemote タグを使用
  • コントローラークラス
    • render メソッドを使ってレスポンスを設定(render メソッドに XML や JSON オブジェクトを渡すか、直接レスポンスの文字列を設定)

サンプル

「Find Data」リンクのクリック時に Ajax で JSON 形式のデータを取得し、div 要素の内容を取得した JSON で置き換えるサンプル。

ajaxtest.gsp
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <g:javascript library="prototype" />
        <title>Ajax Test</title>
    </head>
    <body>
        <g:javascript>
            //Ajax で取得した JSON を div 要素に表示
            function updateData(e) {
                $("data").update(e.responseText);
            }
        </g:javascript>

        <g:remoteLink action="find" onSuccess="updateData(e)">
            Find Data
        </g:remoteLink>
        <hr />
        <div id="data" />

    </body>
</html>
ProductController.groovy
import grails.converters.*

class ProductController {
    ・・・
    def ajaxtest = {
    }

    //Product の一覧を JSON 形式で表示(Ajax で呼び出される処理の実装)
    def find = {
        // ドキュメントによると以下の記述で OK のはずだが、
        // 実際には GroovyCastException が発生する
        //
        //	render Product.list() as JSON

        render new JSON(Product.list())
    }
}