ここら辺を読んだことを整理しておこう。Grailsのコントローラに含まれるアクションのクロージャができる/やるべきこと3つ
【1】前処理(クロージャに対する入力データ)
- FORMパラメータから必要なデータを読み取る(「params」変数を使用。)
- セッション情報から必要なデータを読み取る(「session」変数を使用。)
- その他必要な前処理
【2】本処理
- ドメインオブジェクトを検索したり
- ドメインオブジェクトを作成したり
- ドメインオブジェクトに値を設定して保存したり。
- 加工したり
- その他必要な本処理
【3】後処理(クロージャからの出力処理=次のHTMLページを表示する)
(1) renderメソッドを使ってHTTPレスポンスを作る (1-1) 文字列(あるいはバイナリデータ)を使う (1-2) 指定したGSP Viewを使う (1-3) 指定したテンプレートを使う (2) GSP Viewを使ってHTTPレスポンスを作る (2-1) クロージャからモデルをreturnする。 クロージャ変数名から定まるGSP ViewがHTTPレスポンスに使われる。 (他のGSP Viewを指定する場合は、renderメソッドを使う(1-2)) (3) 他に出力処理を任せる (3-1) redirect(action:クロージャ変数名) (3-2) redirect(action:"/URL") (3-3) redirect(controller:コントローラ名, action:アクションクロージャ変数名) (3-4) chain(action:クロージャ変数名, model:[モデルマップへの追加エントリ]) (4) エラーを返す (4-1) response.sendError(40X)
※ chainとredirectの違いは、chainの場合コントローラが暗黙に持つモデルが維持される(Controllerインスタンスが使いまわされる?とかかな?)。(自信なしかつ未確認)
(補足)Controllerが持つモデルとは
GSP Viewに渡して表示されることを期待するデータ。実体はただのマップ。
Controllerは暗に1つのモデルを保持する。
(補足)全体の流れ
params model GSP View(FORM) ========> Controller ==========> GSP View
こういうこと(か?)。