GETメソッドとth:object:HTMLデータ表示のポイント
はじめに
Spring Bootでthymeleafの学習を進めているのだが、th:objectを使うシチュエーションは当たり前にあるようだ。
しかし、Getメソッドで返却するhtmlファイルにth:objectを記述する意味がよくわからなかったので、頭の整理と備忘録を兼ねて記事として残しておく。
今回は、流れを理解するのが目的なので、具体的なコードは書いていない。
この記事でわかること
- GETメソッドで返却されるhtmlファイルでth:objectを使う意味
メリット
メリットとしては2点ある。
1. 登録・編集画面:フィールドの初期値セットする場合
2. エラー時:フィールドの値を表示させたままにする場合
フィールドの値セットの流れ
下記画像の通り
なぜいきなり空のインスタンスを生成しているのかというと
Controllerクラスに
@ModelAttribute
を使って
Formクラス
をDIしていると、
Getメソッドを実行する前に、
Formクラスをインスタンス生成してModelオブジェクトにセットする
というSpringの仕様がある。
Modelクラスにセットされた後、htmlファイルを返しているということは
th:objectを使って、セットされたFormオブジェクトを取得・表示することができる。
もう少し抽象度を上げて整理
以下の設定で考えてみよう
Formクラス:オーダー用紙
ユーザー:お客
Spring Boot:店員(フロア)
Validation:店員(キッチン)
お客はが来店時、店員(フロア)はオーダーを取りに行きます。
その際、オーダー用紙は白紙です。(@ModelAttributeによるFormクラスの初期化)
お客が、ハンバーガーを頼みます。(入力フォームに値を入れ送信)
店員(フロア)は、オーダー用紙にハンバーガーを記入します。(入力値をFormクラスへバインドし、Modelへセット)
注文された商品がお店の規定に外れたなどで注文が失敗した場合、
店員(キッチン)が店員(フロア)にNGを伝えた後、店員(フロア)はその旨をお客に伝え、オーダーを取り直します。
その際、オーダー用紙にはハンバーガーは記入されたままです。
Getメソッドでreturnされるhtmlのth:objectは、
最初のオーダ用紙の内容と、注文が失敗した時のオーダー用紙の内容を可視化させてくれます。
こんな流れですかね。
Discussion