Что такое модель в ModelAndView от Spring MVC? - PullRequest
79 голосов
/ 20 февраля 2011

Имея эту основную функцию

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

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

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

Ответы [ 7 ]

111 голосов
/ 20 февраля 2011

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

Пример 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!
19 голосов
/ 20 февраля 2011
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)). Вот где модель вступает в игру.

15 голосов
/ 20 февраля 2011

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

Итак ...

   new ModelAndView(view, name, value);

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

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
14 голосов
/ 11 июня 2016

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

ModelAndView ( Просмотр, указатель, держатель );

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

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

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

enter image description here

2 голосов
/ 20 февраля 2011

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

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

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

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

${myVar}

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

0 голосов
/ 12 августа 2018
@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**
0 голосов
/ 19 июня 2017

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

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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...