URLに含まれるパラメータをコントローラで処理する

掲示板でUserとCommentのリレーションを設定したので、Userごとのコメント一覧を表示してみましょう。

まず、どのユーザを対象にするかを指定しなければなりません。これにはformのパラメータを受け取る方法がつかえますが、ここではページ遷移のしやすさを考慮してURLの一部をパラメータとして利用する方法を使ってみましょう。例えばuser1というユーザ名のコメント一覧を表示するURLを「/bbs/user/user1」のようにします。

Controller

URLの一部をパラメータとして利用するには@PathVariableアノテーションを利用します。@RequestMappingで指定するURLの一部を{}で囲むようにすると、この部分が変数として扱えるようになります。

  • 45行目: URLのうちパラメータにしたい部分を{}で囲む。囲んだ文字列は@PathVariableの引数で参照できる。
  • 46行目: URLから取得するパラメータを、メソッドの引数にし@PathVariableをつける。@PathVariableの引数はURLの{}の中の文字列にする。
  • 49行目: UserとCommentでリレーションが設定されているので、UserのインスタンスからCommentのListが取得できる。
  • 53-55行目: 48行目のgetOneでは、データが見つからない場合EntityNotFoundExceptionが発生するので、catchする。ここでは(手を抜いて)単に/bbs/にリダイレクトしている。

View

Userごとのコメントを表示するViewは次のようにします。

Usercomment

掲示板のトップページからユーザ名をクリックしてユーザごとのコメント一覧ページが見られるようにしてみましょう。

  • 11行目: もともとspanだったのをaに変更する。href属性はth:href属性で動的に設定することができる。@{}の中で変数を使うためには__${}__で囲む。

Bbs