この記事では、フォームの値をPOSTで送信したら画面遷移をしてその値を表示する仕組みを解説します。
VSCodeでSpringBootのMavenプロジェクトを作成します。
手順は以下の記事を参照。
SpringBootで新規プロジェクトを作成したら、以下のソースを用意して実行できる状態にします。
(BaseController.java)
BaseController.java
package com.example.demo3;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class BaseController{
@GetMapping("/")
public String home() {
return "form";
}
@PostMapping("/result")
public String result(@RequestParam String msg1,
@RequestParam String msg2,
@RequestParam String msg3, Model model){
model.addAttribute("message1",msg1);
model.addAttribute("message2",msg2);
model.addAttribute("message3",msg3);
return "result";
}
}
@PostMapping("/result")
は、http://localhost/resultにPOSTリクエストがあった場合に実行されます。(form.html)
form.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>form</title>
<script type="text/javascript"></script>
</head>
<body>
<form th:action="@{/result}" method="post">
<label>
メッセージ1:<input type="text" name="msg1"><br>
</label>
<label>
メッセージ2:<input type="text" name="msg2"><br>
</label>
<label>
メッセージ3:<input type="text" name="msg3"><br>
</label>
<button>送信</button>
</form>
</body>
</html>
以下のコードはフォームが送信された場合、/resultへPOSTリクエストを送信することを意味します。
HTML
<form th:action="@{/result}" method="post">
(result.html)
result.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>result</title>
<script type="text/javascript"></script>
</head>
<body>
<p>メッセージ1:<span th:text="${message1}"></span></p>
<p>メッセージ2:<span th:text="${message2}"></span></p>
<p>メッセージ3:<span th:text="${message3}"></span></p>
</body>
</html>
上記のソースを実行してブラウザでhttp://localhost:8080/にアクセスすると以下の画面が表示されます。これは遷移元ページ(form.html)
が表示されています。
(form.html)
にはinput要素が3つ表示されているので、それぞれ異なる文字列を入力してみます。
入力後、「送信」ボタンを押します。
遷移先ページ(result.html)
に遷移して値が表示されていることを確認できました。
(form.html)
が表示されます。(form.html)
にはinput要素を3つ定義してあり、ソース上ではinput要素のname属性の値をmsg1
、msg2
、msg3
としています。
```html
<label>
メッセージ1:<input type="text" name="msg1"><br>
</label>
<label>
メッセージ2:<input type="text" name="msg2"><br>
</label>
<label>
メッセージ3:<input type="text" name="msg3"><br>
</label>
```
msg1
、msg2
、msg3
がBaseController.java
の@RequestParam
で定義したmsg1
、msg2
、msg3
にマッピングされます。
@PostMapping("/result")
public String result(@RequestParam String msg1,
@RequestParam String msg2,
@RequestParam String msg3, Model model){
model.addAttribute("message1",msg1);
model.addAttribute("message2",msg2);
model.addAttribute("message3",msg3);
return "result";
msg1
)の値をmessage1へ出力、msg2
)の値をmessage2へ出力、msg3
)の値をmessage3へ出力、(result.html)
が表示されます。このとき、BaseController.java
のモデル部で定義したmessage1
、message2
、message3
と遷移先ページ(result.html)
のmessage1
、message2
、message3
がマッピングされるため、input要素の値を表示できるというわけです。
```html
<p>メッセージ1:<span th:text="${message1}"></span></p>
<p>メッセージ2:<span th:text="${message2}"></span></p>
<p>メッセージ3:<span th:text="${message3}"></span></p>
```
図解すると以下のようになります。
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!