1. Обзор
В этой статье мы рассмотрим использование основных org.springframework.ui.Model
, org.springframework.ui.ModelMap
и org.springframework.web.servlet.ModelAndView
, предоставляемых Spring MVC.
2. Зависимости Maven
Начнем с зависимости spring-context в нашем файле
pom.xml
:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
Последнюю версию зависимости spring-context можно найти здесь .
Для ModelAndView
требуется зависимость spring-web
:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
Последние версии зависимости spring-web можно найти здесь .
И, если мы используем Thymeleaf в качестве нашего представления, мы должны добавить эту зависимость в pom.xml:
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
Последнюю версию зависимости Thymeleaf можно найти здесь .
3. Модель
Давайте начнем с самого основного понятия — модели
.
Проще говоря, модель может предоставлять атрибуты, используемые для визуализации представлений.
Чтобы предоставить представлению полезные данные, мы просто добавляем эти данные в его объект модели .
Кроме того, карты с атрибутами можно объединять с экземплярами модели :
@GetMapping("/showViewPage")
public String passParametersWithModel(Model model) {
Map<String, String> map = new HashMap<>();
map.put("spring", "mvc");
model.addAttribute("message", "ForEach");
model.mergeAttributes(map);
return "viewPage";
}
4. Карта модели
Как и интерфейс модели выше,
ModelMap
также используется для передачи значений для визуализации представления.
Преимущество ModelMap
в том, что он дает нам возможность передавать набор значений и обрабатывать эти значения так, как будто они находятся внутри Map
:
@GetMapping("/printViewPage")
public String passParametersWithModelMap(ModelMap map) {
map.addAttribute("welcomeMessage", "welcome");
map.addAttribute("message", "ForEach");
return "viewPage";
}
5. Модель и вид
Последний интерфейс для передачи значений в представление — это ModelAndView
.
Этот интерфейс позволяет нам передавать всю информацию, требуемую Spring MVC, за один возврат:
@GetMapping("/goToViewPage")
public ModelAndView passParametersWithModelAndView() {
ModelAndView modelAndView = new ModelAndView("viewPage");
modelAndView.addObject("message", "ForEach");
return modelAndView;
}
6. Вид
Все данные, которые мы помещаем в эти модели, используются представлением — в общем, шаблонным представлением для отображения веб-страницы.
Если у нас есть файл шаблона Thymeleaf, предназначенный для методов нашего контроллера в качестве их представления. Параметр, переданный через модель, будет доступен из HTML-кода тимелеафа:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Title</title>
</head>
<body>
<div>Web Application. Passed parameter : th:text="${message}"</div>
</body>
</html>
Переданный здесь параметр используется с помощью синтаксиса ${message}
, известного как заполнитель. Механизм шаблонов Thymeleaf заменит этот заполнитель фактическим значением атрибута с тем же именем, прошедшего через модель.
7. Заключение
В этом кратком руководстве мы обсудили три основные концепции Spring MVC — Model
, ModelMap
и ModelAndView
. Мы также рассмотрели примеры того, как представление может использовать эти значения.
Как всегда, реализацию всех этих примеров и фрагментов кода можно найти на Github .