Was ist Model in ModelAndView von Spring MVC?

85

Diese Grundfunktion haben

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

Ich weiß, dass dies modelandView zurückgeben wird. Ich weiß, dass dies welcomePagemein Name ist, was bedeutet , dass so etwas welcomepage.jspaufgerufen wird.

Aber ich bin verwirrt mit dem, was Modellteil ist. Was ist WelcomeMessageund messagewie funktioniert Model in diesem Szenario?

Premraj
quelle

Antworten:

114

Das Modell enthält einen Platzhalter für die Informationen, die in der Ansicht angezeigt werden sollen. Es kann sich um eine Zeichenfolge handeln, wie in Ihrem obigen Beispiel, oder um ein Objekt, das eine Reihe von Eigenschaften enthält.

Beispiel 1

Wenn Sie haben...

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

... dann in Ihrem JSP, um die Nachricht anzuzeigen, werden Sie tun: -

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

Beispiel 2

Wenn Sie haben...

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

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

... dann können Sie in Ihrem JSP: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
quelle
4
Das bedeutet, dass WelcomeMessage der Variablenname ist, der in jsp und "Welcome!" . Können Sie mir bitte sagen, wo ich finden kann, welche anderen Dinge das zweite Argument wie jetzt nehmen kann? Ich verstehe, dass es Variablennamen, Modellnamen braucht, gibt es noch etwas anderes, was es nehmen kann
4
Das zweite Argument repräsentiert den logischen Namen Ihres Modells. Sie können es beliebig nennen, aber dies ist der Name, den Sie verwenden, wenn Sie auf Ihr Modell in Ihrer JSP verweisen. In meinem ersten Beispiel habe ich es genannt WelcomeMessage, im zweiten Beispiel habe ich es genannt model. Verwenden Sie einen Namen, der für Sie sinnvoll ist. Das dritte Argument enthält die Informationen ... es kann sich um eine einfache Zeichenfolge, ein POJO oder eine Karte handeln ... im Grunde genommen um nützliche Informationen, die Sie in der Ansicht anzeigen möchten.
Limc
24
new ModelAndView("welcomePage", "WelcomeMessage", message);

ist eine Abkürzung für

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

Wenn Sie sich den obigen Code ansehen, sehen Sie, dass der Ansichtsname "welcomePage" lautet. Ihr ViewResolver(normalerweise eingerichtet in .../WEB-INF/spring-servlet.xml) übersetzt dies in eine Ansicht. Die letzte Zeile des Codes legt ein Attribut in Ihrem Modell fest ( addObject("WelcomeMessage", message)). Hier kommt das Modell ins Spiel.

drei Tassen
quelle
16

Das alles erklärt der Javadoc für den Konstruktor . Es ist ein Convenience-Konstruktor, der das Modell mit einem Attribut / Wert-Paar füllt.

So ...

   new ModelAndView(view, name, value);

ist äquivalent zu:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
Stephen C.
quelle
14

Hier in diesem Fall haben wir 3 Parameter in der Methode, nämlich ModelandView .
Nach dieser Frage ist der erste Parameter aus der Frage leicht zu verstehen. Es stellt die Ansicht dar, die dem Client angezeigt wird.
Die anderen beiden Parameter sind genau wie The Pointer und The Holder.
Daher können Sie es so zusammenfassen

ModelAndView ( Ansicht, Zeiger, Inhaber );

Der Zeiger zeigt nur auf die Informationen im Inhaber

Wenn der Controller die Ansicht mit diesen Informationen verbindet, können Sie in diesem Prozess mit dem Zeiger auf der JSP- Seite auf die in The Holder gespeicherten Informationen zugreifen , um dem Client diese respektierten Informationen anzuzeigen.
Hier ist die visuelle Darstellung des respektierten Prozesses.

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

Geben Sie hier die Bildbeschreibung ein

Tahir Hussain Mir
quelle
2

Nun, WelcomeMessage ist nur ein Variablenname für die Nachricht (aktuelles Modell mit Daten). Grundsätzlich binden Sie das Modell hier mit der welcomePage. Das Modell (Nachricht) wird in welcomePage.jsp als WelcomeMessage verfügbar sein. Hier ist ein einfacheres Beispiel:

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

In diesem Fall ist mein Modell eine einfache Zeichenfolge (In Anwendungen ist dies ein POJO mit Daten, die für DB oder andere Quellen abgerufen wurden.). Ich weise es myVar zu und meine Ansicht ist hello.jsp. Jetzt ist myVar für mich in hello.jsp verfügbar und ich kann es für die Anzeige verwenden.

In der Ansicht können Sie jedoch auf die Daten zugreifen:

${myVar}

Ebenso können Sie über die Variable WelcomeMessage auf das Modell zugreifen.

Abdel Raoof
quelle
0

ModelAndView: Der Name selbst erklärt, dass es sich um eine Datenstruktur handelt, die Modell- und Ansichtsdaten enthält.

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

Wenn das Modell nur einen einzigen Wert enthält, können wir wie folgt schreiben:

ModelAndView("view.name","key.name", "key.value");
Premraj
quelle
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
quelle