Co to jest model w ModelAndView z Spring MVC?

86

Mając tę ​​podstawową funkcję

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

Wiem, że to zwróci modelandView. Wiem, że welcomePageto moja nazwa widoku, więc oznacza to, że ktoś taki jak welcomepage.jspzostanie wywołany.

Ale jestem zdezorientowany tym, co jest częścią modelu. Co to jest WelcomeMessagei messagejak Model działa w tym scenariuszu?

Premraj
źródło

Odpowiedzi:

114

Model przedstawia element zastępczy do przechowywania informacji, które chcesz wyświetlić w widoku. Może to być ciąg znaków, który jest w powyższym przykładzie, lub może to być obiekt zawierający kilka właściwości.

Przykład 1

Jeśli masz...

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

... następnie w swoim jsp, aby wyświetlić wiadomość, zrobisz: -

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

Przykład 2

Jeśli masz...

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

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

... wtedy w swoim jsp możesz zrobić: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
źródło
4
więc oznacza to, że WelcomeMessage to nazwa zmiennej, która ma być używana w jsp i "Witamy!" . Czy możesz mi powiedzieć, gdzie mogę znaleźć inne rzeczy, które może przyjąć drugi argument, tak jak teraz rozumiem, że przyjmuje nazwę zmiennej, nazwę modelu, czy jest coś innego, co może zająć
4
Drugi argument reprezentuje logiczną nazwę twojego modelu. Możesz nazwać to dowolną nazwą, ale jest to nazwa, której będziesz używać podczas odwoływania się do modelu na stronie JSP. W pierwszym przykładzie nazwałem to WelcomeMessage, w drugim przykładzie nazwałem to model. Użyj nazwy, która ma dla Ciebie sens. Trzeci argument zawiera informacje… może to być prosty ciąg znaków, POJO lub mapa… w zasadzie wszelkie przydatne informacje, które chcesz wyświetlić w widoku.
limc
24
new ModelAndView("welcomePage", "WelcomeMessage", message);

jest skrótem od

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

Patrząc na powyższy kod, możesz zobaczyć, że nazwa widoku to „welcomePage”. Twoja ViewResolver(zwykle konfiguracja w .../WEB-INF/spring-servlet.xml) przełoży to na widok. Ostatni wiersz kodu ustawia atrybut w modelu ( addObject("WelcomeMessage", message)). Tutaj do gry wchodzi model.

trzy filiżanki
źródło
16

Wszystko to jest wyjaśnione przez javadoc dla konstruktora . Jest to wygodny konstruktor, który wypełnia model jedną parą atrybut / wartość.

Więc ...

   new ModelAndView(view, name, value);

jest równa:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
Stephen C.
źródło
14

Tutaj w tym przypadku mamy 3 parametry w metodzie, a mianowicie ModelandView .
Zgodnie z tym pytaniem pierwszy parametr jest łatwy do zrozumienia. Reprezentuje widok, który zostanie wyświetlony klientowi.
Pozostałe dwa parametry są takie same jak The Pointer i The Holder
Stąd można to podsumować w ten sposób

ModelAndView ( widok, wskaźnik, uchwyt );

Wskaźnik po prostu wskazuje informacje w The Holder

Kiedy kontroler wiąże Widok z tymi informacjami, wówczas w ramach wspomnianego procesu można użyć wskaźnika na stronie JSP, aby uzyskać dostęp do informacji przechowywanych w posiadaczu w celu wyświetlenia tych informacji klientowi.
Oto wizualne przedstawienie szanowanego procesu.

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

wprowadź opis obrazu tutaj

Tahir Hussain Mir
źródło
2

Cóż, WelcomeMessage to po prostu nazwa zmiennej wiadomości (rzeczywisty model z danymi). Zasadniczo wiążesz model ze stroną powitalną tutaj. Model (wiadomość) będzie dostępny w welcomePage.jsp jako WelcomeMessage. Oto prostszy przykład:

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

W tym przypadku mój model jest prostym ciągiem (w aplikacjach będzie to POJO z danymi pobranymi dla DB lub innych źródeł). Przypisuję go do myVar, a mój widok to hello.jsp. Teraz myVar jest dostępny dla mnie w hello.jsp i mogę go używać do wyświetlania.

W widoku możesz jednak uzyskać dostęp do danych:

${myVar}

Podobnie będzie można uzyskać dostęp do modelu poprzez zmienną WelcomeMessage.

Abdel Raoof
źródło
0

ModelAndView: sama nazwa wyjaśnia, że ​​jest to struktura danych, która zawiera dane modelu i widoku.

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

jeśli model zawiera tylko jedną wartość, możemy napisać następująco:

ModelAndView("view.name","key.name", "key.value");
Premraj
źródło
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**
Sunil
źródło