Cos'è Model in ModelAndView di Spring MVC?


87

Avere questa funzione di base

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

So che questo restituirà modelandView. So che welcomePageè il mio viewname, quindi significa che qualcosa come welcomepage.jspverrà chiamato.

Ma sono confuso con ciò che è parte del modello. Che cosa è WelcomeMessagee messagee come modello di lavoro in questo scenario?

Risposte:


115

Il modello presenta un segnaposto per contenere le informazioni che si desidera visualizzare nella vista. Potrebbe essere una stringa, che è nel tuo esempio precedente, o potrebbe essere un oggetto contenente un gruppo di proprietà.

Esempio 1

Se hai...

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

... poi nel tuo jsp, per visualizzare il messaggio, farai: -

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

Esempio 2

Se hai...

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

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

... poi nel tuo jsp, puoi fare: -

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

4
quindi significa che WelcomeMessage è il nome della variabile da utilizzare in jsp e "Welcome!" . Puoi dirmi dove posso trovare quali altre cose può prendere il secondo argomento come ora capisco che prende il nome della variabile, il nome del modello, c'è qualcos'altro che può prendere

4
Il secondo argomento rappresenta il nome logico del tuo modello. Puoi chiamarlo come vuoi, ma questo è il nome che userai quando farai riferimento al tuo modello nel tuo JSP. Nel mio primo esempio l'ho chiamato WelcomeMessage, nel secondo l'ho chiamato model. Usa un nome che abbia senso per te. Il terzo argomento contiene le informazioni ... potrebbe essere una semplice stringa, o un POJO o una mappa ... praticamente qualsiasi informazione utile che si desidera visualizzare nella vista.
limc

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

è una scorciatoia per

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

Guardando il codice sopra, puoi vedere che il nome della vista è "welcomePage". Il tuo ViewResolver(di solito impostato in .../WEB-INF/spring-servlet.xml) lo tradurrà in una vista. L'ultima riga del codice imposta un attributo nel tuo modello ( addObject("WelcomeMessage", message)). È qui che entra in gioco il modello.


16

È tutto spiegato da javadoc per il costruttore . È un comodo costruttore che popola il modello con una coppia attributo / valore.

Così ...

   new ModelAndView(view, name, value);

è equivalente a:

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

14

Qui in questo caso, abbiamo 3 parametri nel metodo, ovvero ModelandView .
Secondo questa domanda, il primo parametro è facilmente comprensibile. Rappresenta la vista che verrà mostrata al cliente.
Gli altri due parametri sono proprio come The Pointer e The Holder
Quindi puoi riassumere in questo modo

ModelAndView ( View, Pointer, Holder );

Il puntatore punta solo le informazioni nel titolare

Quando il Controller associa la View a queste informazioni, in tale processo, è possibile utilizzare The Pointer nella pagina JSP per accedere alle informazioni memorizzate in The Holder per mostrare quelle informazioni rispettate al cliente.
Ecco la rappresentazione visiva del processo rispettato.

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

inserisci qui la descrizione dell'immagine


2

Bene, WelcomeMessage è solo un nome di variabile per il messaggio (modello effettivo con dati). Fondamentalmente, stai legando il modello con la welcomePage qui. Il modello (messaggio) sarà disponibile in welcomePage.jsp come WelcomeMessage. Ecco un esempio più semplice:

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

In questo caso, il mio modello è una semplice stringa (Nelle applicazioni questo sarà un POJO con dati recuperati per DB o altre fonti.). Lo sto assegnando a myVar e la mia vista è hello.jsp. Ora, myVar è disponibile per me in hello.jsp e posso usarlo per la visualizzazione.

Nella visualizzazione è possibile accedere ai dati però:

${myVar}

Allo stesso modo, sarai in grado di accedere al modello tramite la variabile WelcomeMessage.


0

ModelAndView: il nome stesso spiega che si tratta di una struttura dati che contiene i dati Model e View.

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

se il modello contiene un solo valore, possiamo scrivere come segue:

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**
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.