Что такое модель в ModelAndView из Spring MVC?

86

Имея эту базовую функцию

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

Я знаю, что это вернет modelandView. Я знаю, что welcomePageэто мое имя просмотра, значит, welcomepage.jspбудет называться что-то вроде .

Но меня смущает, что такое модельная часть. Что такое WelcomeMessageи messageкак Модель работает в этом сценарии?

Премрадж
источник

Ответы:

114

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

Пример 1

Если у вас есть...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

... затем в вашем jsp, чтобы отобразить сообщение, вы сделаете: -

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

Пример 2

Если у вас есть...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

... то в своем jsp вы можете: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
источник
4
это означает, что WelcomeMessage - это имя переменной, которое будет использоваться в jsp и "Добро пожаловать!" . Не могли бы вы сказать мне, где я могу найти, что еще может принимать второй аргумент, например, теперь я понимаю, что он принимает имя переменной, имя модели, есть ли еще что-нибудь, что он может принять
4
Второй аргумент представляет собой логическое имя вашей модели. Вы можете называть его любым именем, но это имя вы будете использовать при ссылке на вашу модель в JSP. В моем первом примере я назвал его WelcomeMessage, во втором примере я назвал его model. Используйте имя, которое имеет для вас смысл. Третий аргумент содержит информацию ... это может быть простая строка, POJO или карта ... в основном любая полезная информация, которую вы хотите отобразить в представлении.
limc
24
new ModelAndView("welcomePage", "WelcomeMessage", message);

сокращение для

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

Глядя на приведенный выше код, вы можете увидеть, что имя представления - "welcomePage". Ваш ViewResolver(обычно настраиваемый .../WEB-INF/spring-servlet.xml) переведет это в представление. Последняя строка кода устанавливает атрибут в вашей модели ( addObject("WelcomeMessage", message)). Вот где модель вступает в игру.

три чашки
источник
16

Все это объясняется javadoc для конструктора . Это удобный конструктор, который заполняет модель одной парой атрибут / значение.

Так ...

   new ModelAndView(view, name, value);

эквивалентно:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
Стивен С
источник
14

В этом случае у нас есть 3 параметра в методе, а именно ModelandView .
По этому вопросу легко понять первый параметр. Она представляет собой вид , который будет отображаться клиенту.
Два других параметра похожи на указатель и держатель,
поэтому вы можете резюмировать это так

ModelAndView ( вид, указатель, держатель );

Указатель просто указывает информацию в держателе.

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

return new ModelAndView("welcomePage", "WelcomeMessage", message);

введите описание изображения здесь

Тахир Хуссейн Мир
источник
2

Что ж, WelcomeMessage - это просто имя переменной для сообщения (фактическая модель с данными). По сути, вы привязываете модель к welcomePage здесь. Модель (сообщение) будет доступна в welcomePage.jsp как WelcomeMessage. Вот более простой пример:

ModelAndView("hello","myVar", "Hello World!");

В данном случае моя модель представляет собой простую строку (в приложениях это будет POJO с данными, полученными для БД или других источников). Я назначаю его myVar, и мое представление - hello.jsp. Теперь myVar доступен для меня в hello.jsp, и я могу использовать его для отображения.

Однако в представлении вы можете получить доступ к данным:

${myVar}

Точно так же вы сможете получить доступ к модели через переменную WelcomeMessage.

Абдель Рауф
источник
0

ModelAndView: само название объясняет, что это структура данных, которая содержит данные модели и представления.

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

если модель содержит только одно значение, мы можем написать следующее:

ModelAndView("view.name","key.name", "key.value");
Премрадж
источник
0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
Сунил
источник