Spring MVC'den ModelAndView'daki Model nedir?


87

Bu temel işleve sahip olmak

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

Bunun model veView döneceğini biliyorum. Bunun welcomePagebenim görüş adım olduğunu biliyorum, bu yüzden böyle bir şeyin welcomepage.jspçağrılacağı anlamına geliyor .

Ama Model kısmının ne olduğu ile karıştırıldım. Nedir WelcomeMessageve messagebu senaryoda nasıl Modeli çalışır?

Yanıtlar:


115

Model, görünümde görüntülemek istediğiniz bilgileri tutan bir yer tutucu sunar. Yukarıdaki örneğinizde bulunan bir dize olabilir veya bir sürü özellik içeren bir nesne olabilir.

örnek 1

Eğer varsa ...

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

... sonra jsp'nizde mesajı görüntülemek için şunları yapacaksınız: -

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

Örnek 2

Eğer varsa ...

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

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

... daha sonra jsp'nizde şunları yapabilirsiniz: -

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

4
bu, WelcomeMessage'ın jsp ve "Hoş Geldiniz!" de kullanılacak değişken adı olduğu anlamına gelir. . Lütfen bana ikinci argümanın alabileceği diğer şeyleri nerede bulabileceğimi söyler misiniz, şimdi anlıyorum ki değişken adı, model adı, alabileceği başka bir şey var mı

4
İkinci bağımsız değişken, modelinizin mantıksal adını temsil eder. Ona istediğiniz adla hitap edebilirsiniz, ancak bu, JSP'nizde modelinize referans verirken kullanacağınız addır. İlk örneğimde onu aradım WelcomeMessage, ikinci örnekte aradım model. Size anlamlı gelen bir isim kullanın. Üçüncü argüman bilgiyi tutar ... basit bir dizge veya bir POJO veya bir harita olabilir ... temelde görünümde görüntülemek istediğiniz herhangi bir yararlı bilgi.
limc

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

kısaltmasıdır

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

Yukarıdaki koda baktığınızda, görünüm adının "welcomePage" olduğunu görebilirsiniz. Sizin ViewResolver(genellikle kurulum .../WEB-INF/spring-servlet.xml) bunu bir Görünüme çevirecektir. Kodun son satırı modelinizde ( addObject("WelcomeMessage", message)) bir öznitelik belirler . Model devreye giriyor.


16

Her şey kurucu için javadoc tarafından açıklanmıştır . Modeli bir öznitelik / değer çifti ile dolduran bir kolaylık kurucusudur.

Yani ...

   new ModelAndView(view, name, value);

eşdeğerdir:

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

14

İşte bu durumda, Method'da ModelandView adında 3 parametreye sahibiz .
Bu soruya göre ilk parametre kolayca anlaşılır. İstemciye gösterilecek Görünümü temsil eder .
Diğer iki parametre tıpkı İşaretçi ve Tutucu gibidir.
Dolayısıyla bunu şu şekilde özetleyebilirsiniz.

ModelAndView ( Görünüm, İşaretçi, Tutucu );

Pointer sadece bilgi işaret Tutucu

Ne zaman Kontrolör bağlayan Görünüm Bu bilgilerle, süreci söz konusu o zaman içinde kullanabileceğiniz İşaretçi içinde JSP erişimi sayfa saklanan bilgileri Tutucu müşteriye bilgi saygı duyduğu ekrana.
İşte saygı duyulan sürecin görsel tasviri.

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

görüntü açıklamasını buraya girin


2

WelcomeMessage, mesaj için yalnızca bir değişken adıdır (veriler içeren gerçek model). Temel olarak, modeli burada welcomePage ile bağlıyorsunuz. Model (mesaj) welcomePage.jsp'de WelcomeMessage olarak bulunacaktır. İşte daha basit bir örnek:

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

Bu durumda, modelim basit bir dizedir (Uygulamalarda bu, DB veya diğer kaynaklar için getirilen verileri içeren bir POJO olacaktır.). Bunu myVar'a atıyorum ve benim görüşüm merhaba.jsp. Artık myVar benim için hello.jsp'de mevcut ve bunu görüntüleme için kullanabilirim.

Görünümde, verilere yine de erişebilirsiniz:

${myVar}

Benzer şekilde, Modele WelcomeMessage değişkeni üzerinden erişebileceksiniz.


0

ModelAndView: İsmin kendisi Model ve Görünüm verilerini içeren veri yapısı olduğunu açıklar.

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");

model sadece tek bir değer içeriyorsa, aşağıdaki gibi yazabiliriz:

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**
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.