2013-06-05 7 views
42

Das klingt vielleicht dumm zu den Experten in Spring, aber ich muss fragen. Wie entscheiden Sie, wann Sie vs. Model verwenden sollen?Wann ModelAndView vs Model im Frühjahr verwenden?

Immerhin habe ich die beste Antwort recherchiert, die ich gefunden habe, ist this one. Es hat erwähnt, dass die ist eine alte Art und Weise und die Model mit einer String zurückgegeben ist eine neue Art und Weise in Spring.

Meine Frage ist sollen wir die alte jetzt ablehnen, dass wir Model in der Hand haben? Oder gibt es Fälle, in denen Sie dafür verwenden müssen.

Auch weiß jemand, warum die ModelAndView zu Model und String Wert als View ändern müssen, und was sind die Vorteile?

Antwort

39

ich benutze immer den Ansatz, bei dem Controller-Methoden ModelAndView zurückzukehren. Einfach weil es dazu neigt, die Controller-Methoden etwas knapper zu machen. Die Methodenparameter sind jetzt streng input Parameter. Und alle output verwandten Daten sind in dem Objekt enthalten, das von der Methode zurückgegeben wird.

Die ModelAndView Stil scheint mit Menschen, die nicht gerne Eingangsparameter zu einer Methode zu aktualisieren schwingen. Bei dem Glauben, dass dies einen Nebeneffekt darstellen würde, ein gefährliches Muster, weil Sie nicht zuverlässig vorhersagen können, was die Methode zu tun hat - Es könnte Daten im zurückgegebenen Objekt zurückgeben, oder es könnte irgendetwas in einem der Eingabeargumente aktualisiert haben.

So werden einige Leute weiterhin weiterhin ModelAndView bevorzugen.

Der neue Stil mit Model als Methodenparameter und zurückgegebene Zeichenfolge als Ansichtsname. Scheint von einem etwas anderen Design-Ansatz zu kommen. Hier werden die Modellobjekte als eine Art von Ereignissen oder Elementen betrachtet, die an mehrere Handler übergeben werden, bevor sie an die Ansicht zurückgegeben werden, in der sie gerendert werden. Es erinnert mich daran, wie Ereignisse in der AWT/Swing-Welt gehandhabt werden. Dieses Modell ist kohärenter mit dem Ansatz, bei dem mehrere Handler auf den Model Objekten aufbauen können, bis eine Ansicht erreicht wird.

Also am Ende des Tages scheint es keinen eindeutigen Grund zu geben, beide Ansätze zu kritisieren oder zu fördern. Sie sollten den Stil verwenden, der Ihrer gesamten Designphilosophie mehr entspricht.

Hoffe, das hilft.

+0

Es funktionierte dank :) Hier ist mein Code: '@RequestMapping (value = "STB1/home", method = RequestMethod.GET) \t öffentliche Modeland homeAction() { \t \t Modeland mav = new Modeland ("STB1/Zuhause"); \t \t Rückkehrmav; // rendert /// /src/main/webapp/WEB-INF/jsp/STB1/home.jsp \t} ' – Sangimed

14

Ein Unterschied, den ich erkennen kann, ist mit Modeland Objekt Sie einen direkten Verweis auf einen Blick Objekt einstellen:

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

Während, wenn Sie Modell und String verwenden, benötigen Sie einen Blick Resolver den Namen der Ansicht in aufzulösen eine tatsächliche Ansicht

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

Obwohl ich dem zustimme, bevorzuge ich immer noch, dass die View-Resolver die anzuzeigende Seite auflösen. –

0

In SEO-Perspektive können wir ModelAndView verwenden, um die 301-Umleitung anzuwenden, wenn wir irgendwelche Anforderungen dafür haben, können wir dies nicht mithilfe von Model erreichen.

Verwandte Themen