SpringMVC 入力画面サンプル(ModelAndView) | Hello, Stupid World!

Hello, Stupid World!

いろいろとメモ代わりに書いていきます。

今まではControllerで戻り値として
JSP名を文字列で返していましたが、もう一つ方法があります。

ModelAndViewというクラスを利用する方法です。
さっそくサンプルを見てみましょう。

[UserController.java]
@Controller
public class UserController {
  @RequestMapping(method = RequestMethod.GET)
  public
ModelAndView input() {
    return new
ModelAndView("user/input", "inputModel", new InputModel());
  }

  @RequestMapping(method = RequestMethod.POST)
  public
ModelAndView show(@ModelAttribute("inputModel") InputModel inputModel) {
    return new
ModelAndView("user/show", "inputModel", inputModel);
  }
}


ModelAndViewクラスの引数に表示するビューの名前、使用モデル名、
モデルをセットしています。
モデルを使わないのならばビュー名だけ指定するコンストラクタ等も
あります。

また、今回はモデルをModelAttributeアノテーションをつけた
メソッドでインスタンス化せずにinputメソッド内でインスタンス化して
みました。

個人的にはStringで返す方法よりもこっちのが分かりやすいと
思いました。
ModelAndViewを返しているから画面遷移だな・・・って感じで
あと、Stringで返す方はModelの渡し方が分からずテストコードも
書けませんでした。

ちなみにModelAndViewを使った場合のテストコードはこんな感じ
でいけました。

[UserControllerTest.java]
public class UserControllerTest {
  @Test
  public void testInput() {
    UserController user = new UserController();
    ModelAndView modelView = user.input();
    assertEquals("user/input", modelView.getViewName());
    assertTrue(modelView.getModel().containsKey("inputModel"));
  }
}

このテストコードだとinputメソッドが呼ばれた場合に正常に動いている
しか調べられません。
GET/POSTリクエストが飛んだ際に正常に動くかどうかをテストする
方法はまた別途説明します。