Spring Boot + Thymeleaf の基本です。ユーザのフォーム入力をコントローラで取得する方法をメモしておきます。
JSP でも応用可能です。Controller クラスはそのまま使えます。
1つの文字列を受け取る場合
単純な1つの文字列を受け取るこのような画面を作成します。
初期表示
テキストボックスに適当な文字列を入力し、送信ボタンをクリックすると画面遷移し、文字列が表示されます。。
Thymeleaf のテンプレートとしては 1 つだけ作成します。
Thymeleaf テンプレートを作成
まずテンプレートを準備します。ファイル名は「index.html」としました。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>demo</title> </head> <body> <p> <label>前回のメッセージ:</label> <label th:text="${msg}">前回のメッセージ</label> </p> <form action="#" th:action="@{/confirm}" method="GET"> <p> <label for="message">メッセージ:</label> <input id="message" name="msg" type="text" size="40" /> </p> <p> <input type="submit" value="送信" /> </p> </form> </body> </html>
フォームの中にテキストボックスとサブミットボタンがひとつずつ置いてあります。name 属性は「msg」としました。このパラメータ名でコントローラに値が渡されます。
<input id="message" name="msg" type="text" size="40" />
Controller の作成
続いてコントローラを作成します。
package org.yyama; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class DemoController { @RequestMapping("/") public String index() { return "index"; } @RequestMapping("/confirm") public String confirm(@ModelAttribute("msg") String arg) { System.out.println("msg:" + arg); return "index"; } }
送信ボタンが押されたときの処理を以下に抜粋します。
@RequestMapping("/confirm") public String confirm(@ModelAttribute("msg") String arg) { System.out.println("msg:" + arg); return "index"; }
「@ModelAttribute("msg") String arg」という引数の宣言があります。
何が書いてあるのか説明しますと、
「@ModelAttribute("msg") 」が「URL パラメータの msg を」となります。
「String arg」が「String 型の変数 arg に格納します。」となります。
つまり、「@ModelAttribute("msg") String arg」は「URL パラメータの msg をString 型の変数 arg に格納します。」ですね。
2つの文字列を受け取る場合
入力ボックスをもう一つ増やしてみます。
初期画面
2つのテキストボックスに適当な文字列を入力して送信ボタンを押した後
Thmeleaf テンプレート
テンプレートを少し変更しました。単純に入力テキストボックスや出力ラベルを増やしています。
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>demo</title> </head> <body> <p> <label>前回のメッセージ1:</label> <label th:text="${msg1}">前回のメッセージ1</label> </p> <p> <label>前回のメッセージ2:</label> <label th:text="${msg2}">前回のメッセージ2</label> </p> <form action="#" th:action="@{/confirm}" method="GET"> <p> <label for="message1">メッセージ1:</label> <input id="message1" name="msg1" type="text" size="40" /> </p> <p> <label for="message2">メッセージ2:</label> <input id="message2" name="msg2" type="text" size="40" /> </p> <p> <input type="submit" value="送信" /> </p> </form> </body> </html>
コントローラ
修正したメソッドのみ抜粋します。
@RequestMapping("/confirm") public String confirm(@ModelAttribute("msg1") String arg1, @ModelAttribute("msg2") String arg2) { System.out.println("msg1:" + arg1); System.out.println("msg2:" + arg2); return "index"; }
引数で msg1 と msg2 を取得するように修正されているのが分かると思います。
単純に引数指定が増えているだけです。簡単ですね。
まとめ
今回は 1~2 個のパラメータをコントローラで受け取るだけなので、パラメータ受け取り用の form クラスは作成しませんでした。ログイン画面など単純な画面でしたらこういう方法もありだと思います。
パラメータがもっと多い場合は、受け取る情報を form クラスでまとめて宣言します。やり方はまた別の記事にします。
それではここまで。
Spring 関連記事へのリンク集はこちら。
www.shookuro.com
Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
- 作者: 株式会社NTTデータ
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2018/01/30
- メディア: 単行本
- この商品を含むブログを見る
- 作者: 掌田津耶乃
- 出版社/メーカー: 秀和システム
- 発売日: 2016/02/18
- メディア: 単行本
- この商品を含むブログを見る