1. Введение
В этом учебнике мы поговорим о различных способах доступа к данным Spring MVC с помощью Thymeleaf.
Мы начнем с создания шаблона электронной почты с помощью Thymeleaf, и мы будем укреплять его с данными из нашего приложения Весна.
2. Настройка проекта
Во-первых, мы должны добавить наши Зависимость от тимьяна :
org.springframework.boot spring-boot-starter-thymeleaf 2.4.0
Во-вторых, давайте включим Весенняя загрузка веб- :
org.springframework.boot spring-boot-starter-web 2.4.0
Эта зависимость предоставляет нам поддержку REST, которую мы позже будем использовать для создания некоторых конечных точек.
Мы создадим несколько шаблонов Thymeleaf, чтобы охватить наши примеры и хранить их в ресурсов/mvcdata . В каждом разделе учебника будет реализовываться другой шаблон:
Наконец, нам нужно будет внедрить класс контроллеров, где мы будем хранить нашу бизнес-логику:
@Controller public class EmailController { private ServletContext servletContext; public EmailController(ServletContext servletContext) { this.servletContext = servletContext; } }
Наш класс контроллеров не всегда будет зависеть от контекста сервлета, но мы добавляем его здесь, чтобы мы могли продемонстрировать конкретную функцию Thymeleaf позже.
3. Атрибуты модели
Атрибуты модели используются внутри классы контроллеров, которые готовят данные для визуализации внутри представления .
Один из способов добавления атрибутов в нашу модель заключается в том, чтобы требовать экземпляра Модель в качестве параметра в методе контроллера.
Давайте проготовим наши emailData в качестве атрибута:
@GetMapping(value = "/email/modelattributes") public String emailModel(Model model) { model.addAttribute("emailData", emailData); return "mvcdata/email-model-attributes"; }
Весна будет вводить экземпляр Модель для нас, когда /email/modelattributes запрашивается.
Тогда мы можем обратиться к нашей emailData атрибут модели в выражении Thymeleaf:
Subject
Другой способ сделать это – рассказать нашему контейнеру Spring, какой атрибут требуется, на наш взгляд, с помощью @ModelAttribute :
@ModelAttribute("emailModelAttribute") EmailData emailModelAttribute() { return emailData; }
И тогда мы можем представить данные, на наш взгляд, как:
Для получения дополнительных примеров данных модели, пожалуйста, ознакомьтесь с нашей моделью, ModelMap и ModelView весной MVC учебник.
4. Параметры запроса
Другим способом доступа к данным являются параметры запроса:
@GetMapping(value = "/email/requestparameters") public String emailRequestParameters( @RequestParam(value = "emailsubject") String emailSubject) { return "mvcdata/email-request-parameters"; }
Между тем, в нашем шаблоне мы должны указать какой параметр содержит данные с помощью ключевого парам :
Мы также можем иметь несколько параметров запроса с одинаковым названием:
@GetMapping(value = "/email/requestparameters") public String emailRequestParameters( @RequestParam(value = "emailsubject") String emailSubject, @RequestParam(value = "emailaddress") String emailAddress1, @RequestParam(value = "emailaddress") String emailAddress2) { return "mvcdata/email-request-parameters"; }
Затем у нас будет два варианта, чтобы показать данные.
Во-первых, мы можем использовать th:каждый пройти через каждый параметр с одинаковым названием:
Во-вторых, мы можем использовать индекс нашего параметра массива:
5. Атрибуты сеанса
Или мы можем поместить наши данные в HttpSession атрибут:
@GetMapping("/email/sessionattributes") public String emailSessionAttributes(HttpSession httpSession) { httpSession.setAttribute("emaildata", emailData); return "mvcdata/email-session-attributes"; }
Затем, подобно параметрам запроса, мы можем использовать сессионный ключевое слово:
6. Атрибуты ServletContext
С СервлетКонтекст , мы не сможем использовать выражение для доступа к emailData ‘S свойства.
Для работы над этим мы перейдем каждое значение в качестве отдельного атрибута:
@GetMapping("/email/servletcontext") public String emailServletContext() { servletContext.setAttribute("emailsubject", emailData.getEmailSubject()); servletContext.setAttribute("emailcontent", emailData.getEmailBody()); servletContext.setAttribute("emailaddress", emailData.getEmailAddress1()); servletContext.setAttribute("emaillocale", emailData.getEmailLocale()); return "mvcdata/email-servlet-context"; }
А потом, мы можем получить каждый через сервлетКонтекст переменная:
7. Фасоль
Наконец, мы также можем предоставить данные с помощью контекстных бобов:
@Bean public EmailData emailData() { return new EmailData(); }
Thymeleaf позволяет доступ фасоли с помощью @beanName синтаксис:
8. Заключение
В этом небольшом учебнике мы узнали, как получить доступ к данным через Thymeleaf.
Во-первых, мы добавили соответствующие зависимости. А во-вторых, мы внедрили некоторые методы REST, чтобы мы могли передавать данные в наш шаблон.
Как всегда, код доступен более на GitHub .