LoginSignup
11
15

More than 3 years have passed since last update.

Spring MVCでPost-Redirect-Getパターンを実装する

Last updated at Posted at 2019-05-30

フォーム送信を同期的に処理する際のブラウザのリロード・バック操作対策として定番である、Post-Redirect-GetパターンをSpring MVCで実装する方法を調査した。

まとめ

  • Controllerメソッドでリダイレクトするには redirect:{View} を返却する。(参考
  • Postメソッドを受けるControllerメソッドから、リダイレクト後のGetメソッドを受けるControllerメソッドにデータを渡すには、Flash Attributeを利用する。
  • バリデーション結果の引継ぎはTymeleafテンプレートで参照できるように以下のキー名でFlash Attributeに格納する。
    org.springframework.validation.BindingResult.{クラス名 (camel case)}
  • リダイレクト後に、初回のフォーム表示をしたControllerメソッドに戻る場合は、以下のいずれかの実装とする必要がある。
    • Controllerメソッドの引数のフォーム用モデルとする場合は、Flash Attributeのバリデーション結果をモデルにコピーする。
      • バリデーション結果を保管するBindingResultモデルが空のインスタンスで設定され、Tymeleafテンプレートでバリデーション結果を表示できなくなるため。
    • Controllerメソッドの引数をフォーム用モデルでなくModelインターフェースにする。
      • この場合は初回フォーム表示時のNullPointerException発生を避けるために自分でフォーム用モデルの初期化をする必要がある。

実装例

参考

11
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
15