LoginSignup
13
17

More than 5 years have passed since last update.

【Spring】Model, ModelAndView, ModelMapの違い

Last updated at Posted at 2019-04-13

■やりたいこと
ModelAndView, Model, ModelMapの違いについて知りたい。

■各オブジェクトについて
ModelMap
・LinkedHashMapである。

ModelAndView
・ViewとModelを両方追加できる。
・addObjectをすると内部で保持するModelMapに追加される。
・addAttribute

ExtendedModelMap (Model)
・Modelインターフェースを実現している。
・ModelMapを継承している。
・ハンドラの引数はこれをさらに継承した「BindingAwareModelMap」である。

■構造
  BindingAwareModelMap
   ┗ ExtendedModelMap
    ┗ModelMap, Mode

  ModelAndView
   ┗ModelMap


①インプット情報(Form)が「model」にセットされるのか。
②チェック結果情報(BindingResult)が「model」にセットされるのか。

Test.java

    @PostMapping("entry1")
    public String entry1(Model model, @Validated TestForm form, BindingResult result) {
        return "output";
    }

    @PostMapping("entry2")
    public String entry2(ModelMap model, @Validated TestForm form, BindingResult result) {
        return "output";
    }

    @PostMapping("entry3")
    public String entry3(ModelAndView model, @Validated TestForm form, BindingResult result) {
        return "output";
    }

①,②の結果
Model : される。
ModelMap : される。
ModelAndView : されない(ModelMapがNull)。


@ModelAttributeのオブジェクトは「model」にセットされるのか。

Test.java

    @ModelAttribute
    public EchoForm getForm() {
        return new EchoForm();
    }
    @GetMapping("show1")
    public String show1(Model model) {
        return "input";
    }
    @GetMapping("show2")
    public String show2(ModelMap model) {
        return "input";
    }
    @GetMapping("show3")
    public String show3(ModelAndView model) {
        return "input";
    }

③の結果
Model : される。
ModelMap : される。
ModelAndView : されない。(ModelMapがNULL)


④セッション情報はModelにセットされるのか。
(SessionBeanをDIした場合)

これについては勘違いしていた。
@ModelAttributeを使用する場合はModelにセッション情報をセットする必要があったが、
@SessionScopeの場合、それは必要なく、直接
コントローラクラスのフィールドにDIされたオブジェクトを操作すればよいのだ。
よってセッションBeanはModelには設定されない。


■まとめ
・ModelAndView - Modelのデータを保持する。
・Model - Modelのふるまいを定義する。
・ModelMap - Modelのデータ自身である。
 ⇒ 細かいことを抜きにすれば、いずれもデータは「ModelMap」型で保持している。

13
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
17