Spring MVCのModelAndViewのモデルとは何ですか?


86

この基本的な機能を持つ

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

これでmodelandViewが返されることはわかっています。それwelcomePageが私のビュー名であることを知っているので、のようなものwelcomepage.jspが呼び出されることを意味します。

しかし、私はモデル部分とは何かと混同しています。何ですWelcomeMessagemessageそのシナリオでは、どのようにモデルの仕事は?

回答:


114

モデルは、ビューに表示する情報を保持するためのプレースホルダーを提供します。上記の例にある文字列の場合もあれば、一連のプロパティを含むオブジェクトの場合もあります。

例1

あなたが持っている場合...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

...次に、jspでメッセージを表示するには、次のようにします。-

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

例2

あなたが持っている場合...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

...次に、jspで次のことができます。-

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!

4
つまり、WelcomeMessageは、jspおよび「Welcome!」で使用される変数名です。。2番目の引数が取ることができる他のことをどこで見つけることができるか教えてください今私はそれが変数名、モデル名を取ることを理解しています、それが取ることができる他のものはありますか

4
2番目の引数は、モデルの論理名を表します。好きな名前を付けることができますが、これは、JSPでモデルを参照するときに使用する名前です。最初の例ではそれを呼び出しWelcomeMessage、2番目の例ではそれを呼び出しましたmodel。わかりやすい名前を使用してください。3番目の引数は情報を保持します...それは単純な文字列、POJO、またはマップである可能性があります...基本的にビューに表示したい有用な情報。
limc 2011

24
new ModelAndView("welcomePage", "WelcomeMessage", message);

の省略形です

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

上記のコードを見ると、ビュー名が「welcomePage」であることがわかります。あなたのViewResolver(通常はで設定.../WEB-INF/spring-servlet.xml)はこれをビューに変換します。コードの最後の行は、モデルの属性を設定します(addObject("WelcomeMessage", message))。そこでモデルが登場します。


16

これはすべて、コンストラクターのjavadocによって説明されています。これは、モデルに1つの属性/値のペアを設定する便利なコンストラクターです。

そう ...

   new ModelAndView(view, name, value);

と同等です:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);

14

この場合、メソッドにはModelandViewという3つのパラメーターがあります。
この質問によると、最初のパラメータは簡単に理解できます。これは、クライアントに表示されるビューを表します。
他の2つのパラメーターは、ポインターホルダーと同じです
したがって、次のように合計できます。

ModelAndView(ビュー、ポインター、ホルダー);

ポインタは、ホルダー内の情報を指すだけです

ときにコントローラがバインドビューをこの情報で、その後にプロセスは、あなたが使用することができたポインタのJSPに格納されている情報にアクセスするページホルダーをクライアントに情報を尊敬することを表示します。
これが尊敬されるプロセスの視覚的描写です。

return new ModelAndView("welcomePage", "WelcomeMessage", message);

ここに画像の説明を入力してください


2

WelcomeMessageは、メッセージの単なる変数名です(データを含む実際のモデル)。基本的に、ここではモデルをwelcomePageにバインドしています。モデル(メッセージ)は、welcomePage.jspでWelcomeMessageとして利用できます。より簡単な例を次に示します。

ModelAndView("hello","myVar", "Hello World!");

この場合、私のモデルは単純な文字列です(アプリケーションでは、これはDBまたは他のソース用にフェッチされたデータを持つPOJOになります)。私はそれをmyVarに割り当てており、私のビューはhello.jspです。これで、myVarがhello.jspで利用可能になり、表示に使用できるようになりました。

ビューでは、データにアクセスできます。

${myVar}

同様に、WelcomeMessage変数を介してモデルにアクセスできます。


0

ModelAndView:名前自体は、モデルとビューのデータを含むデータ構造であることを説明しています。

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

モデルに単一の値しか含まれていない場合、次のように記述できます。

ModelAndView("view.name","key.name", "key.value");

0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.