uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

コントローラについて

ここら辺を読んだことを整理しておこう。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

こういうこと(か?)。