2013-06-05 9 views
42

Może to zabrzmieć głupio dla ekspertów w Spring, ale muszę zapytać. W jaki sposób decydujesz kiedy używać ModelAndView vs. Model?Kiedy używać ModelAndView kontra Model na wiosnę?

Po tym wszystkim, że przeszukałem najlepszą odpowiedź, znalazłem: this one. Wspomniano, że ModelAndView jest starym sposobem, a zwrócony Model ze zwróconym String jest nowym sposobem w Spring.

Moje pytanie brzmi: czy mamy wycofać stare ModelAndView teraz, gdy mamy pod ręką Model? Czy istnieją przypadki, w których należy użyć do tego celu ModelAndView.

Czy ktoś wie, dlaczego trzeba zmienić wartość ModelAndView na Model i String jako View i jakie są korzyści?

Odpowiedz

39

Zawsze używam podejścia, w którym metody kontrolera zwracają ModelAndView. Po prostu dlatego, że powoduje to, że metody kontrolera są nieco bardziej zwięzłe. Parametry metody są teraz ściśle parametrami input. Wszystkie dane powiązane z output są zawarte w obiekcie zwróconym przez metodę.

Styl wydaje się rezonować z ludźmi, którzy nie lubią aktualizacji parametrów wejściowych do metody. Trzymanie się przekonania, że ​​będzie to stanowić efekt uboczny, niebezpieczny wzór, ponieważ nie można wiarygodnie przewidzieć, co zrobi metoda - Może zwrócić dane w zwróconym obiekcie, lub może zaktualizować wszystko w dowolnym z argumentów wejściowych.

Niektórzy ludzie nadal będą woleli ModelAndView.

Nowy styl z Model jako parametrem metody i zwrócony ciąg jako nazwa widoku. Wydaje się, że pochodzi z nieco innego podejścia do projektowania. Obiekty modelu są tutaj traktowane jako rodzaj zdarzeń lub elementów przekazywanych do wielu procedur obsługi przed zwróceniem ich do widoku, w którym są renderowane. Przypomina mi, w jaki sposób odbywają się wydarzenia w świecie AWT/Swing. Ten model jest bardziej spójny z podejściem, w którym wiele programów obsługi może budować na obiektach Model, aż osiągnie widok.

Tak więc na koniec dnia nie ma wyraźnego powodu, aby krytykować lub promować oba podejścia. Powinieneś używać stylu, który jest bardziej spójny z ogólną filozofią projektowania.

Mam nadzieję, że to pomoże.

+0

To działało dzięki :) Oto mój kod: '@RequestMapping (value = "STB1/home" method = RequestMethod.GET) \t publicznego ModelAndView homeAction() { \t \t ModelAndView MAV = new ModelAndView ("STB1/home"); \t \t return mav; // renderuje /// /src/main/webapp/WEB-INF/jsp/STB1/home.jsp \t} – Sangimed

14

Jedną z różnic mogę dostrzec to z obiektu ModelAndView można ustawić bezpośrednie odniesienie do obiektu Widok:

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

natomiast jeśli używasz modelu i łańcuch, trzeba rzutem resolverowi rozwiązać nazwę widoku w Rzeczywisty widok

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

Chociaż się z tym zgadzam, nadal wolę, aby rozwiązania do rozstrzygania podglądu były zgodne z wyświetlaniem strony. –

0

W perspektywie SEO możemy użyć ModelAndView do zastosowania przekierowania 301, jeśli mamy do tego jakiekolwiek wymagania, Nie możemy tego osiągnąć za pomocą Modelu.

Powiązane problemy