Имея эту базовую функцию
protected ModelAndView handleRequestInternal(...) {
...
return new ModelAndView("welcomePage", "WelcomeMessage", message);
}
Я знаю, что это вернет modelandView. Я знаю, что welcomePage
это мое имя просмотра, значит, welcomepage.jsp
будет называться что-то вроде .
Но меня смущает, что такое модельная часть. Что такое WelcomeMessage
и message
как Модель работает в этом сценарии?
spring
spring-mvc
Премрадж
источник
источник
WelcomeMessage
, во втором примере я назвал егоmodel
. Используйте имя, которое имеет для вас смысл. Третий аргумент содержит информацию ... это может быть простая строка, POJO или карта ... в основном любая полезная информация, которую вы хотите отобразить в представлении.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)
). Вот где модель вступает в игру.источник
Все это объясняется javadoc для конструктора . Это удобный конструктор, который заполняет модель одной парой атрибут / значение.
Так ...
new ModelAndView(view, name, value);
эквивалентно:
Map model = ... model.put(name, value); new ModelAndView(view, model);
источник
В этом случае у нас есть 3 параметра в методе, а именно ModelandView .
По этому вопросу легко понять первый параметр. Она представляет собой вид , который будет отображаться клиенту.
Два других параметра похожи на указатель и держатель,
поэтому вы можете резюмировать это так
ModelAndView ( вид, указатель, держатель );
Указатель просто указывает информацию в держателе.
Когда Контроллер связывает представление с этой информацией, тогда в указанном процессе вы можете использовать указатель на странице JSP для доступа к информации, хранящейся в держателе, для отображения этой уважаемой информации для клиента.
Вот наглядное изображение уважаемого процесса.
return new ModelAndView("welcomePage", "WelcomeMessage", message);
источник
Что ж, WelcomeMessage - это просто имя переменной для сообщения (фактическая модель с данными). По сути, вы привязываете модель к welcomePage здесь. Модель (сообщение) будет доступна в welcomePage.jsp как WelcomeMessage. Вот более простой пример:
ModelAndView("hello","myVar", "Hello World!");
В данном случае моя модель представляет собой простую строку (в приложениях это будет POJO с данными, полученными для БД или других источников). Я назначаю его myVar, и мое представление - hello.jsp. Теперь myVar доступен для меня в hello.jsp, и я могу использовать его для отображения.
Однако в представлении вы можете получить доступ к данным:
${myVar}
Точно так же вы сможете получить доступ к модели через переменную WelcomeMessage.
источник
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");
источник
@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**
источник