@PostMapping
ビューgreeting.htmlでsubmitボタンが押下されると、下記の命令通りURL:/greetingがmethod:postで発行されます。
| 9 |     <form action="#" th:action="@{/greeting}" th:object="${greeting}" method="post"> | 
http://<サーバー名>:8080/greeting
このURLの要求とモデル、ビューと結び付けているのがコントローラーGreetingControllerの18行目からになります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.example.handlingformsubmission; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PostMapping; @Controller public class GreetingController { 	@GetMapping("/greeting") 	public String greetingForm(Model model) { 		model.addAttribute("greetings", new Greeting()); 		return "greeting"; 	} 	@PostMapping("/greeting") 	public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) { 		model.addAttribute("greeting", greeting); 		return "result"; 	} } | 
18行目の「@PostMapping(“/greeting”)」でURL:/greeting method:postの要求の定義をしています。
| 18 | 	@PostMapping("/greeting") | 
19行目でメソッド greetingSubmitが定義されていますが、13行目のメソッドgreetingFormに比べ引数@ModelAttribute Greeting greetingが増えています。
| 19 | 	public String greetingSubmit(@ModelAttribute Greeting greeting, Model model) { | 
今回はビューのformタグからsubmitされるので、引数の1番目に入力された値の情報が渡ってきます。そして@ModelAttributeを記述することで入力された値が指定したクラス(Greeting)のプロパティに設定されます。

ここまでの流れをプロパティidを中心に確認します。ビューgreeting.htmlでinputタグにth:field=”*{id}”が記述されています。これによりinputタグとクラスGreetingのプロパティidが紐づけられます。そして、今回の@ModelAttributeによりinputタグに入力された値がクラスGreetingのプロパティidに設定されます。
20行目で引数のmodelクラスのaddAttributeメソッド利用して、ビューに引き渡す値を設定しています。ここでは、引数で定義したgreeting(既に入力された値が@ModelAttributeにより設定されています)を設定して名前を「greeting」としています。
| 20 | 		model.addAttribute("greeting", greeting); | 
21行目でビューresultを表示しています。
| 21 | 		return "result"; | 
モデル
ビューresultを見る前にモデルGreetingをのぞいてみます。プロパティ(変数)はid,contentが定義されそのセッター、ゲッターメソッドがあるシンプルな内容です。ビューはこのセッター、ゲッターメソッドを通じて変数の照会、設定を行いますので、必ずセッター、ゲッターメソッドを用意する必要があります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | package com.example.handlingformsubmission;</p> public class Greeting { 	private long id; 	private String content; 	public long getId() { 		return id; 	} 	public void setId(long id) { 		this.id = id; 	} 	public String getContent() { 		return content; 	} 	public void setContent(String content) { 		this.content = content; 	} } | 
result.html
ビューresult.htmlに記述されたSpring Thymeleafエンジンの命令(「th:」から始まる命令)を中心に見ていきます。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <!DOCTYPE HTML> <html xmlns:th="https://www.thymeleaf.org"> <head>      <title>Getting Started: Handling Form Submission</title>     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> 	<h1>Result</h1>     <p th:text="'id: ' + ${greeting.id}" />     <p th:text="'content: ' + ${greeting.content}" />     <a href="/greeting">Submit another message</a> </body> </html> | 
9行目、10行目に「th:」命令があります。
| 9 10 |     <p th:text="'id: ' + ${greeting.id}" />     <p th:text="'content: ' + ${greeting.content}" /> | 
「th:text=」は右側に記述した内容を表示する命令です。テキストを表示したい場合は”‘テキスト'”のように記述します。変数の場合は”${変数名}”となります。+を記述すると左右の内容が結合され表示されます。
 
9行目の表示に変数${greeting.id}、10行目に${greeting.content}があります。これは、コントローラーの20行目でクラスGreetingのインスタンスを名前「greeting」で設定しています。これで「greeting.プロパティ名」でプロパティの値が取得できます。結果、ビューgreeting.htmlで入力した値がビューresult.htmlで表示されます。
| 20 | model.addAttribute("greeting", greeting); | 
ここまでサンプルプログラムの動き見てきました。もし理解できなくともあきらめないでください。次に新規のプログラムを作成していきましょう。


