🎉

GETメソッドとth:object:HTMLデータ表示のポイント

2024/03/03に公開

はじめに

Spring Bootでthymeleafの学習を進めているのだが、th:objectを使うシチュエーションは当たり前にあるようだ。
しかし、Getメソッドで返却するhtmlファイルにth:objectを記述する意味がよくわからなかったので、頭の整理と備忘録を兼ねて記事として残しておく。
今回は、流れを理解するのが目的なので、具体的なコードは書いていない。

この記事でわかること

  1. 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