Mając tę podstawową funkcję
protected ModelAndView handleRequestInternal(...) {
...
return new ModelAndView("welcomePage", "WelcomeMessage", message);
}
Wiem, że to zwróci modelandView. Wiem, że welcomePage
to moja nazwa widoku, więc oznacza to, że ktoś taki jak welcomepage.jsp
zostanie wywołany.
Ale jestem zdezorientowany tym, co jest częścią modelu. Co to jest WelcomeMessage
i message
jak Model działa w tym scenariuszu?
spring
spring-mvc
Premraj
źródło
źródło
WelcomeMessage
, w drugim przykładzie nazwałem tomodel
. 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.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.źródło
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);
źródło
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);
źródło
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.
źródło
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");
źródło
@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**
źródło