web-dev-qa-db-de.com

Wann sollte ModelAndView vs Model im Frühling verwendet werden?

Das mag den Experten in Spring dumm klingen, aber ich muss fragen. Wie entscheiden Sie, wann Sie ModelAndView vs. Model verwenden sollten? 

Nach allem, was ich recherchiert habe, ist die beste Antwort, die ich gefunden habe, diese . Es wurde erwähnt, dass ModelAndView ein alter Weg ist und der Model mit einem String, der zurückgegeben wird, ein neuer Weg in Spring ist. 

Meine Frage ist, sollten wir die alte ModelAndView abschätzen, nachdem wir Model in der Hand haben? Oder gibt es Fälle, in denen Sie ModelAndView verwenden müssen.

Weiß jemand auch, warum der Wert ModelAndView in Model und String als View geändert werden muss, und welche Vorteile ergeben sich daraus? 

50
sheidaei

Ich verwende immer den Ansatz, bei dem Controller-Methoden ModelAndView zurückgeben. Einfach, weil die Controller-Methoden dadurch etwas strenger werden. Die Methodenparameter sind jetzt streng input-Parameter. Alle output-bezogenen Daten sind in dem von der Methode zurückgegebenen Objekt enthalten.

Der ModelAndView-Stil scheint bei Leuten zu schwingen, die keine Eingabeparameter auf eine Methode aktualisieren möchten. Festhalten an der Überzeugung, dass dies eine Nebenwirkung darstellen würde, ein gefährliches Muster, da Sie nicht zuverlässig vorhersagen können, was die Methode tun wird. Sie könnte Daten im zurückgegebenen Objekt zurückgeben oder alles in den Eingabeargumenten aktualisieren.

Daher bevorzugen einige Leute weiterhin ModelAndView.

Der neue Stil mit Model als Methodenparameter und zurückgegebener String als Ansichtsname. Scheint von einem etwas anderen Design-Ansatz ausgehen. Hier werden die Modellobjekte als eine Art Ereignisse oder Elemente betrachtet, die an mehrere Handler übergeben werden, bevor sie an die Ansicht zurückgegeben werden, in der sie wiedergegeben werden. Es erinnert mich daran, wie Ereignisse in der AWT/Swing-Welt behandelt werden. Dieses Modell ist kohärenter mit dem Ansatz, bei dem mehrere Handler auf den Model-Objekten aufbauen können, bis sie eine Ansicht erreichen.

Am Ende des Tages scheint es also keinen eindeutigen Grund zu geben, beide Vorgehensweisen zu kritisieren oder zu fördern. Sie sollten den Stil verwenden, der Ihrer gesamten Designphilosophie besser entspricht.

Hoffe das hilft.

43
Akshay

Einen Unterschied kann ich beim ModelAndView-Objekt feststellen, in dem Sie einen direkten Verweis auf ein Ansichtsobjekt festlegen können:

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

Wenn Sie dagegen Model und String verwenden, benötigen Sie einen View-Resolver, um den View-Namen in eine tatsächliche View aufzulösen

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

In der SEO-Perspektive können wir ModelAndView verwenden, um die 301-Umleitung anzuwenden, falls dies erforderlich ist. Dies können wir mit Model nicht erreichen.

0
Shams
@RequestMapping("/")
public ModelAndView AWBCOntroller() {
    log.info("Tracking info");
    ModelAndView mav = new ModelAndView();
    mav.setViewName("index");
    return mav;

}
0
Vishnu Mari