Подтвердить что ты не робот

Когда использовать ModelAndView vs Model в Spring?

Это может показаться глупым для экспертов Spring, но я должен спросить:
Как вы решаете, когда использовать ModelAndView а когда использовать Model?

После всего, что я исследовал, лучший ответ, который я нашел, это этот. Он упомянул, что ModelAndView - это старый способ, а Model с возвращенной String - это новый способ в Spring.

Мой вопрос заключается в том, должны ли мы ModelAndView от старого ModelAndView теперь, когда у нас есть Model в руках? Или есть ли случаи, когда вам нужно использовать ModelAndView для этого?

Кроме того, кто-нибудь знает, почему необходимо изменить ModelAndView на Model и String качестве View, и каковы преимущества?

4b9b3361

Ответ 1

Я всегда использую подход, в котором методы контроллера возвращаются ModelAndView. Просто потому, что он, как правило, делает методы контроллера немного более краткими. Параметры метода теперь строго input. И все связанные данные output содержатся в объекте, возвращаемом методом.

Стиль ModelAndView, похоже, резонирует с людьми, которым не нравится обновлять входные параметры для метода. Придерживаясь убеждения, что это будет представлять собой побочный эффект, опасный шаблон, потому что вы не можете надежно предсказать, что будет делать этот метод, - он может возвращать данные в возвращаемом объекте, или он мог бы обновить что-либо в любом из входных аргументов.

Итак, некоторые люди по-прежнему предпочитают ModelAndView.

Новый стиль с Model как параметр метода и возвращаемая строка в качестве имени представления. Кажется, это исходит из немного другого подхода к дизайну. Здесь объекты модели считаются разновидностью событий или элементов, которые передаются нескольким обработчикам, перед возвратом в представление, где они отображаются. Это напоминает мне, как события обрабатываются в мире AWT/Swing. Эта модель более согласована с подходом, в котором несколько обработчиков могут строиться поверх объектов Model, пока не достигнут вид.

Таким образом, в конце дня, похоже, нет определенной причины критиковать или продвигать любой подход. Вы должны использовать стиль, который будет более соответствовать вашей общей философии дизайна.

Надеюсь, что это поможет.

Ответ 2

Одно отличие, которое я могу заметить, - это объект ModelAndView, который вы можете установить прямое отношение к объекту вида:

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

В то время как если вы используете Model и String, для разрешения имени представления в фактический вид вам нужен разрешающий вид.

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

Ответ 3

В перспективе SEO. Мы можем использовать ModelAndView для применения перенаправления 301, если у нас есть какие-либо требования к этому. Мы не можем достичь этого с помощью модели.

Ответ 4

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

}