2013-06-05 17 views
42

Questo potrebbe sembrare stupido da esperti sugli Spring ma devo chiedere. Come decidi quando utilizzare ModelAndView rispetto a Model?Quando utilizzare ModelAndView vs Model in primavera?

Dopo tutto quello che ho studiato la risposta migliore che ho trovato è this one. Si è detto che il ModelAndView è un modo vecchio e il Model con un String restituito è un nuovo modo di Spring.

La mia domanda è dobbiamo togliere il vecchio ModelAndView ora che abbiamo Model in mano? O c'è qualche caso che è necessario utilizzare ModelAndView per questo.

Inoltre, qualcuno sa il motivo per cui la devono cambiare ModelAndView a Model e String valore come View, e quali sono i vantaggi?

risposta

39

uso sempre il metodo in cui i metodi controllore restituiscono ModelAndView. Semplicemente perché tende a rendere i metodi del controller un po 'più concisi. I parametri del metodo sono ora rigorosamente input parametri. E tutti i dati relativi a output sono contenuti nell'oggetto restituito dal metodo.

Lo stile ModelAndView sembra risuonare con le persone che non amano l'aggiornamento parametri di input a un metodo. Mantenendo la convinzione che ciò costituirebbe un effetto collaterale, un modello pericoloso perché non è possibile prevedere in modo affidabile che cosa il metodo sta per fare: potrebbe restituire i dati nell'oggetto restituito, oppure potrebbe aver aggiornato qualcosa in qualsiasi argomento di input.

Così alcune persone continuano a preferire ModelAndView.

Il nuovo stile con Model come parametro di metodo e stringa restituita come nome della vista. Sembra provenire da un approccio progettuale leggermente diverso. Qui gli oggetti del modello sono considerati come una sorta di eventi o elementi che vengono passati a più gestori, prima di essere restituiti alla vista in cui sono resi. Mi ricorda come gli eventi vengono gestiti nel mondo AWT/Swing. Questo modello è più coerente con l'approccio in cui più gestori possono costruire sopra gli oggetti Model, fino a quando non raggiunge una vista.

Quindi, alla fine della giornata, non sembra esserci una ragione precisa per criticare o promuovere entrambi gli approcci. Dovresti usare lo stile che si sente più coerente con la tua filosofia di design generale.

Spero che questo aiuti.

+0

Ha funzionato grazie :) Ecco il mio codice: '@RequestMapping (value = "STB1/home", method = RequestMethod.GET) \t pubblico ModelAndView homeAction() { \t \t ModelAndView mav = new ModelAndView ("STB1/home"); \t \t return mav; // rende /// /src/main/webapp/WEB-INF/jsp/STB1/home.jsp \t} ' – Sangimed

14

Una differenza posso posto è con oggetto ModelAndView è possibile impostare un riferimento diretto a una sottofinestra:

ModelAndView mav = ... 
mav.setView(myView); 

Mentre se si utilizza per modello e String, è necessario un sistema di risoluzione al fine di risolvere il nome della vista in una vista reale

public String myHandler(...) { 
    return "myviewname"; // has to have a resolver from "myviewname" into an actual view 
} 
+0

Anche se sono d'accordo, preferisco ancora che i Risolutori di vista risolvano la pagina da visualizzare. –

0

In prospettiva SEO, possiamo utilizzare ModelAndView per applicare il reindirizzamento 301 se abbiamo requisiti per questo, Non possiamo raggiungere questo utilizzando il Modello.

Problemi correlati