演習: リクエストパラメーター
この章では、リクエストの値を受け取る方法を扱います。B- は本文の書店アプリ bookstore、T- はタスク管理アプリ tasks の問題です。
B-3. 書籍のタイトル検索
Section titled “B-3. 書籍のタイトル検索”書籍一覧 /books に、タイトルで絞り込む検索を追加します。
やること
/booksで@RequestParam(defaultValue = "")のkeywordを受け取る- タイトルに
keywordを含む本だけをModelに渡す。keywordが空なら全件 - 一覧の上に検索フォームを置く。テキスト入力と検索ボタンで
GET /booksに送る
完成イメージ:
ヒント
検索フォームの入力欄の name を keyword にすると、GET /books?keyword=... で送られ、@RequestParam の基本 のとおり @RequestParam String keyword で受け取れます。
?keyword= が無くても動くよう、省略可能なパラメーター の defaultValue = "" を付けます。絞り込みは Java 側で行い、title に keyword を含む本だけを Model に渡します。空なら全件です。
T-4. タスクの追加フォーム
Section titled “T-4. タスクの追加フォーム”T-2 で静的に作った /tasks/new のフォームを、実際に送信できるようにします。
Task の変更
Taskにnotes(メモ、String)を足す。getter はgetNotes()
フォーム
title・notesを持つTaskFormを作り、@ModelAttributeで受け取る/tasks/newのフォームを「タスク名」と「メモ」の 2 項目にする@PostMapping("/tasks")で受け取り、redirect:/tasksで一覧へ戻す- アプリの入り口
/を開いたら、@GetMapping("/")でreturn "redirect:/tasks"を返して一覧へ送る - 保存処理は後の章で扱う。この章はフォームの受け取りと遷移まで
完成イメージ:
ヒント
複数の入力をまとめて受け取るには、フォームクラスへのバインド のとおり、title・notes を持つ TaskForm を作り @ModelAttribute TaskForm form で受け取ります。入力欄の name をフィールド名に合わせます。
登録後に再読み込みしても二重送信にならないよう、PRG パターン のとおり return "redirect:/tasks" でリダイレクトします。
入力されたタイトルやメモは、一覧で th:text を使えば自動エスケープされ、<script> などを入れても実行されません。