その1に関してはこちらの記事を見てください。
yagibrary.hatenablog.com
第11章 Spring MVC + Thymeleaf
11.7 ハンドラメソッドと@XxxMapping
ハンドラメソッドは、リクエストと紐づいたControllerクラスのメソッドのことを指します。ハンドラメソッドを作成するには、Controllerクラスの中に適当なメソッドを作成した後、@XxxMappingというアノテーションを付ければよいです。
@GetMappingや@PostMappingはSpring Frameworkのバージョン4.3から登場したアノテーションです。
11.8 リクエストパラメータの取得
ハンドラメソッドでは、リクエストパラメータの値を引数で受け取ることができます。
▼例11.2 リクエストパラメータのサンプル
pageNo=1&maxCount=10
例11.2のリクエストパラメータの値を受け取るハンドラメソッドのサンプルをソース11.10に示します。
▼ソース11.10 リクエストパラメータを受け取るハンドラメソッド
@XxxMapping("/display-list") public String displayList(@RequestParam("pageNo") int pNo, @RequestParam("maxCount") int max) { ...
また、@RequestParamとは別の方法でリクエストパラメータを取得することも可能です。まず、任意のクラスを作成し、プロパティ名*1をリクエストパラメータ名に合わせます(ソース11.13)。
▼ソース11.13 リクエストパラメータの値を格納するクラス
public class PageInput { private Integer pageNo; private Integer maxCount; ... Getter・Setterメソッド
作成したクラスの型をハンドラメソッドの引数で定義します(ソース11.14)。
▼ソース11.14 値を格納するクラスを引数で定義したハンドラメソッド
@XxxMapping("/display-list") public String displayList(PageInput pageInput) { ...
例11.2のリクエストパラメータが送信されると、ハンドラメソッドが呼ばれる前にPageInputクラスのオブジェクトが自動的に作成され、パラメータの値がプロパティに設定されます。
11.9 Viewへのデータの渡し方
11.10 Thymeleafでデータを参照
Trainingオブジェクトが、「title」「startDateTime」「reserved」のプロパティを持っています。これらのプロパティをHTMLに埋め込んでいるテンプレートファイルのサンプルをソース11.17に示します。
▼ソース11.17 Modelオブジェクトのデータを参照
<table> <tr> <th>研修タイトル</th> <td><span th:text="${training.title}"></span></td>❶ </tr> <tr> <th>開始日時</th> <td><span th:text="${#temporals.format(training.startDateTime, 'yyyy/MM/dd HH:mm')}"></span>❷ </td> </tr> <tr> <th>予約数</th> <td><span th:text="${training.reserved}"></span></td>❸ </tr>
❷の行では、「#temporals.format」という記述がされています。「#」マークはThymeleafが保持する汎用的なオブジェクトにアクセスするための記述です。temporalsは、日時データを扱うのに便利なオブジェクトです。
11.11 Listオブジェクトの参照
まずはModelオブジェクトの中にListオブジェクトを格納します。ソース11.19にサンプルを示します。
▼ソース11.19 ListオブジェクトをModelオブジェクトに格納
@GetMapping("/display-list") public String displayList(Model model) { List<Training> trainings = trainingService.findAll(); model.addAttribute("trainingList", trainings); return "training/trainingList"; }