Skip to content
Playground

演習: リクエストパラメーター

この章では、リクエストの値を受け取る方法を扱います。B- は本文の書店アプリ bookstoreT- はタスク管理アプリ tasks の問題です。

書籍一覧 /books に、タイトルで絞り込む検索を追加します。

やること

  • /books@RequestParam(defaultValue = "")keyword を受け取る
  • タイトルに keyword を含む本だけを Model に渡す。keyword が空なら全件
  • 一覧の上に検索フォームを置く。テキスト入力と検索ボタンで GET /books に送る

完成イメージ:

ヒント

検索フォームの入力欄の namekeyword にすると、GET /books?keyword=... で送られ、@RequestParam の基本 のとおり @RequestParam String keyword で受け取れます。

?keyword= が無くても動くよう、省略可能なパラメーターdefaultValue = "" を付けます。絞り込みは Java 側で行い、titlekeyword を含む本だけを Model に渡します。空なら全件です。

T-2 で静的に作った /tasks/new のフォームを、実際に送信できるようにします。

Task の変更

  • Tasknotes(メモ、String)を足す。getter は getNotes()

フォーム

  • titlenotes を持つ TaskForm を作り、@ModelAttribute で受け取る
  • /tasks/new のフォームを「タスク名」と「メモ」の 2 項目にする
  • @PostMapping("/tasks") で受け取り、redirect:/tasks で一覧へ戻す
  • アプリの入り口 / を開いたら、@GetMapping("/")return "redirect:/tasks" を返して一覧へ送る
  • 保存処理は後の章で扱う。この章はフォームの受け取りと遷移まで

完成イメージ:

ヒント

複数の入力をまとめて受け取るには、フォームクラスへのバインド のとおり、titlenotes を持つ TaskForm を作り @ModelAttribute TaskForm form で受け取ります。入力欄の name をフィールド名に合わせます。

登録後に再読み込みしても二重送信にならないよう、PRG パターン のとおり return "redirect:/tasks" でリダイレクトします。

入力されたタイトルやメモは、一覧で th:text を使えば自動エスケープされ、<script> などを入れても実行されません。