[Grails (グレイルズ) ] flash で設定したメッセージが再度表示される

flash のスコープは、次のリクエストまで有効である。
以下のように flash にメッセージを入れて画面を表示した場合

すぐに render するとその次のリクエストでも値が有効になり、エラーメッセージが再度表示されてしまう。

想定としては、redirect した時にリダイレクト先で表示した view に値を渡す場合である。
以下の場合だと、show にリダイレクトしてその先で表示した view のリクエストまで有効であるので、その先には表示されない。

flash を使って、redirect ではなく render で表示した場合にメッセージの再表示を抑える方法は二つある。

  1. flash のメッセージを表示したら flash の内容を初期化する
  2. view 側で、以下のように flash.messagenull を入れる

  3. render の時は、flash ではなく request を使う
  4. contorller 側では以下のようにする

    view 側では以下のようにする

    お勧めというか、私がやった対応は、上記 1 の対応。
    処理によって、request だったり flash だったり切り分けるのが面倒なので、画面に表示する情報は全て flash スコープ変数に入れた。




[Grails (グレイルズ) ] gsp内部で、呼び出すテンプレートに引数を渡す

View から呼び出されるテンプレート (デフォルトだと _form.gsp という名前がついている) に引数を渡して、テンプレート内部での処理を切り替える方法。

  1. View 側で以下のように、テンプレートを呼び出す所で model を与えてあげる。
  2. テンプレート内部では from という変数が参照可能になる。
  3. _form.gsp での処理。 doas という変数が参照可能になる