SpringBoot + Thymeleafでフォームの中身をまるごと取得する方法
こんにちは。
今日はSpring boot + Thymeleafを使用して、フォームの中身をまるごと取得する方法について書こうと思います。
難しいことは何もありません。とっても簡単です。
これからやることは
- フォームの値をまるごと入れるBeanをつくる
- formタグに名前をつけたHTMLをつくる
- Controllerでformタグにつけた名前を呼び出して値を取得する
これだけです。とりあえずシンプルなログイン画面で試してみましょう。
こんなのです。
このフォームのログインボタン押下時に、IDとパスワードに入力した値をまとめて取得したいと思います。
では早速実装していきましょう。
開発環境
- Spring Tool Suite 3.9.2
- Spring Boot 2
- Thymeleaf
Beanの用意
まずはフォームから受信した内容をまるごと入れる為のBeanを用意しましょう。
ここではLog101Form.java
というBeanを用意しました。
クラス名上部の@Getter/@Setter
は、Lombokのgetter/setter
自動生成機能です。
普通にgetter/setter
を書いてしまっても構いません。
HTMLの用意
次にHTMLを用意しましょう。
ここではLOG101.html
というHTMLファイルを用意しました。
まずはHTMLのformタグにth:object
属性を設定しましょう。
ここではth:object="${log101Form}"
としました。
先ほど作成したBeanの名称と合わせると分かりやすいかもしれませんね。
そして、送信するラベルにもname
属性を設定します。
ここで設定する値は、先ほど作成したBeanのフィールド名と一致させてください。
name
属性に設定した値が異なると、フォームの値がどこにも入りません。
今回の例だとmemberNo
とpassword
ですね。
Controllerの用意
最後にControllerを用意しましょう。 @ModelAttribute
を使用します。
先ほどHTMLのth:object
に設定した値log101Form
と、最初に作成したLog101Form
クラスをメソッドの引数に設定します。
@ModelAttributeの引数に設定する値は、th:objectに設定した値と一致させてください。
こちらも値が一致しないと、フォームの値を取得することができません。
実装は以上となります。 とてもシンプルですね。
実行
今回はIDに1
、パスワードに123
を入力しました。
デバッグで入力した値が取得できているか確認してみましょう。
入力した値である、1
と123
が取得できていることが確認できますね。
このメソッドに到達した時点で、値が取得できていればOKです。
まとめ
以上、SpringBoot + Thymeleafでフォームの中身をまるごと取得する方法についてご紹介しました。
@RequestParam
で一つひとつ受け取るのも良いですが、
個人的にはまとめて受け取る方が好きです。
取得したい値が増えてもBeanにフィールドを追加すればいいだけですからね。
プロジェクトの規模が大きければ大きいほど、クライアントから値を取得する方法が統一されていた方が良いのではないかと思います。
ポイントはth:objectと@ModelAttributeに紐づける値を一致させることです。
それでは、また。