2013-06-05 7 views
42

これはSpringの専門家には馬鹿に聞こえるかもしれませんが、私は尋ねなければなりません。 ModelAndViewModelのどちらを使用するかはどのように決めるのですか?ModelAndViewとSpringのモデルを使用するタイミングは?

私が見つけた最高の答えは、結局、this oneです。 ModelAndViewは古い方法であり、Stringが返されたModelは新しい方法でSpringに記載されています。

私の質問は、Modelが手元にあるので、古いModelAndViewを廃止しますか?または、ModelAndViewを使用する必要がある場合があります。

また、ViewとしてModelModelAndViewString値を変更する必要があり、なぜ誰もが知っている、とのメリットは何でしょうか?あなたがモデルと文字列を使用している場合、あなたにビュー名を解決するために、ビューリゾルバを必要とするのに対し

ModelAndView mav = ... 
mav.setView(myView); 

:私は見つけることができ

答えて

39

私は常にコントローラのメソッドがModelAndViewを返す方法を使用します。コントローラメソッドを少し簡潔にする傾向があるからです。メソッドパラメータは厳密にはinputのパラメータになりました。そして、すべてのoutput関連データは、メソッドから返されたオブジェクトに含まれています。

ModelAndViewのスタイルは、メソッドへの入力パラメータの更新が気に入らない人たちと共鳴するようです。これは副作用であると考えています。メソッドが何をしようとしているかを確実に予測できないため、危険なパターンです。返されたオブジェクトのデータを返すか、入力引数のいずれかに何かを更新する可能性があります。

したがって、一部の人々は依然としてModelAndViewを好む傾向があります。

メソッドのパラメータにModelという新しいスタイルがあり、ビューの名前として文字列が返されました。わずかに異なる設計アプローチから来ているようだ。ここでモデルオブジェクトは、レンダリングされるビューに返される前に、複数のハンドラに渡されるイベントまたはアイテムのソートと見なされます。 AWT/Swingの世界でイベントがどのように処理されるかを思い出させます。このモデルは、Modelオブジェクトの上に複数のハンドラが構築され、ビューに到達するまでのアプローチとより一貫しています。

したがって、いずれのアプローチも批判したり促進したりする明確な理由はないようです。あなたは、あなたの全体的なデザイン哲学に一貫していると感じるスタイルを使用するべきです。

これが役に立ちます。

+0

それは感謝:) はここに私のコードですが働いていました"STB1/home"); \t \t return mav; //レンダリング/// /src/main/webapp/WEB-INF/jsp/STB1/home.jsp \t} '' – Sangimed

14

一つの違いは、ビューオブジェクトへの直接参照を設定することができますのModelAndViewオブジェクトであります実際の表示

public String myHandler(...) { 
    return "myviewname"; // has to have a resolver from "myviewname" into an actual view 
} 
+0

私はこれに同意しますが、表示されるページを解決するView Resolversを依然として持っています。(= RequestMethod.GET = "STB1 /ホーム" 値、メソッド) '@RequestMapping \t公共のModelAndView homeAction(){ \t \tのModelAndViewのMAV =新しいのModelAndView(: –

0

SEOの観点からは、ModelAndViewを使用して301リダイレクトを適用することができます。要件がある場合はモデルを使用してこれを達成できません。

関連する問題