Grails で Ajax
Grails 1.0-RC3 で Ajax を使ったサンプルを作ってみた。
とりあえず、Grails で Ajax を使うには以下のようにすれば良いみたい。
- 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()) } }