thymeleaf spring boot что это
Приложение Spring Boot CRUD с Thymeleaf
Узнайте, как создать простое приложение CRUD с помощью Spring Boot и Thymeleaf.
1. Обзор
Реализация DAO слоев, которые обеспечивают функциональность CRUD для JPA сущностей, может быть повторяющейся, трудоемкой задачей, которой мы хотим избежать в большинстве случаев. К счастью, Spring Boot упрощает создание CRUD-приложений с помощью уровня стандартных репозиториев CRUD на основе JPA.
Дальнейшее чтение:
Параметры запроса пружины с помощью Thymeleaf
Изменение каталога шаблонов Thymeleaf в весенней загрузке
2. Зависимости Maven
В этом случае мы будем полагаться на spring-boot-starter-parent для простого управления зависимостями, управления версиями и настройки подключаемых модулей. В результате нам не нужно будет указывать версии зависимостей проекта в вашем pom.xml файл, за исключением переопределения версии Java:
3. Доменный Уровень
Поскольку все зависимости проекта уже установлены, давайте теперь реализуем наивный доменный уровень.
Для простоты этот слой будет включать один единственный класс, который будет отвечать за моделирование Пользователей сущностей:
4. Уровень Хранилища
На данный момент наш образец веб-приложения ничего не делает. Но это скоро изменится.
Чтобы предоставить нашему приложению базовую функциональность CRUD для Пользовательских объектов, все, что нам нужно сделать, это расширить интерфейс CrudRepository :
5. Уровень Контроллера
Первый отобразит форму регистрации пользователя, в то время как второй сохранит новую сущность в базе данных после проверки ограниченных полей.
Если объект не пройдет проверку, форма регистрации будет отображена повторно. В противном случае, как только объект будет сохранен, список сохраненных объектов будет обновлен в соответствующем представлении:
Нам также понадобится сопоставление для /индекса URL:
Если сущность существует, она будет передана в качестве атрибута модели в представление формы обновления, следовательно, форма может быть заполнена значениями полей имя и электронная почта :
Первый сохранит обновленную сущность в базе данных, в то время как последний удалит данную сущность.
В любом случае список сохраняемых объектов будет соответствующим образом обновлен:
6. Слой Представления
На данный момент мы реализовали класс функционального контроллера, который выполняет операции CRUD над Пользователями сущностями. Даже в этом случае в этой схеме все еще отсутствует компонент: слой представления.
В папке src/main/ресурсы/шаблоны нам нужно создать HTML-шаблоны, необходимые для отображения формы регистрации, формы обновления и отображения списка сохраняемых Пользователей сущностей,
Как указано во введении, мы будем использовать Thymeleaf в качестве базового механизма шаблонов для анализа файлов шаблонов.
Вот соответствующий раздел add-user.html файл:
Наконец, у нас есть index.html файл, в котором отображается список сохраненных объектов вместе со ссылками для редактирования и удаления существующих:
7. Запуск приложения
Наконец, давайте определим точку входа приложения. Как и большинство приложений Spring Boot, мы можем сделать это с помощью простого старого метода main() :
Если сборка успешно скомпилирована мы должны увидеть базовую панель управления пользователями CRUD со ссылками для добавления новых объектов, а также для редактирования и удаления существующих.
8. Заключение
В этом уроке мы узнали, как создать базовое веб-приложение CRUD с помощью Spring Boot и Thymeleaf.
Руководство: Thymeleaf + Spring. Часть 1
1. Интеграция Thymeleaf с Spring
2. SpringStandard Диалект
3. Views и View Resolvers
3.1 Views и View Resolvers в Spring MVC
3.2 Views и View Resolvers в Thymeleaf
4. Spring Thyme Seed Starter Manager
4.1 Концепция
4.2 Бизнес слой
4.3 Spring MVC configuration
4.4 Контроллер
4.5 Конфигурирование Conversion Service
5 Отображение Seed Starter Data
6 Создание Форм
6.1 Обработка командного объекта
6.2 Inputs
6.3 Checkbox fields
6.4 Radio Button fields
6.5 Dropdown/List selectors
6.6 Dynamic fields
7 Проверка и сообщения об ошибках
7.1 Field errors
7.2 Все ошибки
7.3 Глобальные ошибки
7.4 Отображение ошибок вне форм
7.5 Богатые объекты ошибок
8 Это все еще прототип!
9 Служба конверсии (The Conversion Service)
9.1 Конфигурирование
9.2 Синтаксис двойной скобки
9.3 Использование в формах
9.4 #conversions объект преобразования
10 Отрисовка фрагментов шаблона Template Fragments (AJAX etc)
10.1 Определение фрагментов в бине представления
10.2 Определение фрагментов в возвращаемом значении контроллера
11 Продвинутые интеграционные фичи
11.1 Интеграция с RequestDataValueProcessor
11.1 Построение URIs к контроллерам
12 Spring WebFlow интеграция
12.2 AJAX фрагменты в Spring WebFlow
В этом руководстве объясняется, как Thymeleaf может быть интегрирован с Spring Framework, особенно (но не только) Spring MVC.
Примеры кода и пример приложения в этом руководстве используют Spring 4.x и соответствующие ему интеграции Thymeleaf, но содержимое этого текста также применимо для Spring 3.x. Если ваше приложение использует Spring 3.x, все, что вам нужно сделать, это заменить пакет org.thymeleaf.spring4 на org.thymeleaf.spring3 в примерах кода.
1. Интеграция Thymeleaf с Spring
Thymeleaf предлагает набор интеграций Spring, которые позволяют использовать его как полнофункциональную замену JSP в приложениях Spring MVC.
Эти интеграции позволят вам:
2. SpringStandard Диалект
Чтобы добиться более легкой и лучшей интеграции, Thymeleaf предоставляет диалект, который специально реализует все необходимые функции для правильной работы с Spring.
Этот конкретный диалект основан на стандартном диалекте Thymeleaf и реализован в классе org.thymeleaf.spring4.dialect.SpringStandardDialect, который фактически происходит от org.thymeleaf.standard.StandardDialect.
Помимо всех функций, уже присутствующих в стандартном диалекте и, следовательно, унаследованных, SpringStandard Dialect предлагает следующие специфические функции:
Пример конфигурации бина:
Или, используя конфигурацию Spring на основе XML:
3. Views и View Resolvers
3.1 Views и View Resolvers в Spring MVC
В Spring MVC есть два интерфейса, которые соответствуют ядру его системы шаблонов:
ViewResolvers — это объекты, отвечающие за получение объектов View для конкретной операции и локали. Обычно контроллеры просят ViewResolvers переслать представление с определенным именем (строка, возвращаемая методом контроллера), а затем все средства разрешения представления в приложении выполняются в упорядоченной цепочке, пока один из них не сможет разрешить это представление, в каком случае объект View возвращается и ему передается управление для рендеризации HTML.
Обратите внимание, что не все страницы в наших приложениях должны быть определены как представления, а только те, поведение которых мы хотим, чтобы мы были нестандартными или настраивались особым образом (например, путем подключения к нему некоторых специальных компонентов). Если ViewResolver запрашивается представление, у которого нет соответствующего bean-компонента (что является распространенным случаем), новый объект View создается ad hoc и возвращается.
Типичная конфигурация JSP + JSTL ViewResolver в приложении Spring MVC из прошлого выглядела так:
Беглого взгляда на его свойства достаточно, чтобы узнать, как он был настроен:
3.2 Views и View Resolvers в Thymeleaf
Thymeleaf предлагает реализации для двух интерфейсов, упомянутых выше:
Конфигурация Resolver Thymeleaf View очень похожа на JSP:
Параметр templateEngine, конечно же, является объектом SpringTemplateEngine, который мы определили в предыдущей главе. Два других (order и viewNames) являются необязательными и имеют то же значение, что и в JSP ViewResolver, который мы видели ранее.
Обратите внимание, что нам не нужны префиксные или суффиксные параметры, потому что они уже указаны в Template Resolver (который, в свою очередь, передается в Template Engine).
А что, если мы хотим определить bean-компонент View и добавить к нему несколько статических переменных? Легко, просто определите для него прототип:
Сделав это, вы сможете запросить этот компонент, выбрав его по имени (в данном случае mainView).
4. Spring Thyme Seed Starter Manager
Исходный код для примеров, показанных в этой и последующих главах этого руководства, можно найти в репозитории GitHub Spring Seyme Seed Starter Manager.
4.1 Концепция
Касательно Thymeleaf — мы большие поклонники thyme, и каждый spring мы готовим наши стартовые наборы с хорошей почвой и нашими любимыми семенами, сажаем их под испанское солнце и терпеливо ждем, пока наши новые растения вырастут.
Но в этом году нам надоело наклеивать ярлыки на стартовые контейнеры для семян, чтобы узнать, какие семена были в каждой ячейке контейнера, поэтому мы решили подготовить приложение, используя Spring MVC и Thymeleaf, чтобы помочь нам каталогизировать наши стартеры: Spring Thyme SeedStarter Менеджер.
Аналогично приложению Good Thymes Virtual Grocery, которое мы разработали в учебном пособии «Использование Thymeleaf», STSM позволит нам продемонстрировать наиболее важные аспекты интеграции Thymeleaf как механизма шаблонов для Spring MVC.
4.2 Бизнес слой
Нам понадобится очень простой бизнес-уровень для нашего приложения. Прежде всего, давайте посмотрим на наши модельные объекты:
Пара очень простых классов обслуживания обеспечит необходимые бизнес-методы. Подобно:
4.3 Spring MVC configuration
Затем нам нужно настроить конфигурацию Spring MVC для приложения, которая будет включать не только стандартные артефакты Spring MVC, такие как обработка ресурсов или сканирование аннотаций, но также создание экземпляров Template Engine и View Resolver.
4.4 Контроллер
Конечно, нам также понадобится контроллер для нашего приложения. Поскольку STSM будет содержать только одну веб-страницу со списком начальных значений и форму для добавления новых, мы напишем только один класс контроллера для всех взаимодействий сервера:
Теперь давайте посмотрим, что мы можем добавить к этому классу контроллера.
Сначала мы добавим некоторые атрибуты модели, которые нам понадобятся на странице:
А теперь самая важная часть контроллера, отображаемые (mapped ) методы: один для отображения страницы формы, а другой для обработки добавления новых объектов SeedStarter.
4.5 Конфигурирование Conversion Service
Чтобы обеспечить простое форматирование объектов Date, а также объектов Variety в нашем слое представления, мы настроили наше приложение таким образом, чтобы объект Spring ConversionService был создан и инициализирован (расширяемым WebMvcConfigurerAdapter) с помощью пары необходимых нам объектов форматирования.
Посмотри еще раз:
Spring formatters are implementations of the org.springframework.format.Formatter interface. For more information on how the Spring conversion infrastructure works, see the docs at spring.io.
Давайте посмотрим на DateFormatter, который форматирует даты в соответствии со строкой форматирования, присутствующей в ключе сообщения date.format наших Messages.properties:
VarietyFormatter автоматически преобразует между нашими объектами Variety и способом, которым мы хотим использовать их в наших формах (в основном, по значениям их полей id):
Мы узнаем больше о том, как эти средства форматирования влияют на способ отображения наших данных в дальнейшем.
Русские Блоги
Spring Boot шаблонный движок интеграции Thymeleaf
Spring Boot Шаблонный движок Thymeleaf для интеграции
1. Введение Thymeleaf
Во-вторых, основное использование Thymeleaf
Посредством тегов + выражений данные и шаблон объединяются и, наконец, преобразуются в HTML-код, который возвращается пользователю.
Основное использование Thymeleaf делится на 2 части:
1. Использование тегов
1.1 th: вывод основной информации о тексте
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
span th :text= «$
body >
html >
package com.littlefxc.blog.controller;
import org.springframework.stereotype. Controller ;
import org.springframework.web.bind.annotation. RequestMapping ;
import org.springframework.web.servlet.ModelAndView;
/**
* @author fengxuechao
*/
@Controller
public class IndexController <
1.2 th: вывод utxt html контента
Используйте «th: text» для вывода содержимого как есть, а «th: utext» для вывода тегов html.
package com.littlefxc.blog.controller;
import org.springframework.stereotype. Controller ;
import org.springframework.web.bind.annotation. RequestMapping ;
import org.springframework.web.servlet.ModelAndView;
/**
* @author fengxuechao
*/
@Controller
public class IndexController <
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
p th :utext= «$
body >
html >
1.3 th: if, th: если только условие не определено
1.4 th: switch, th: case multi-condition суждение
Примечание:Параметр по умолчанию указывается с помощью th: case = «*».
1,5-й: каждый цикл
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :each= «name,item:$
span th :text= «$
span th :text= «$
div >
body >
html >
package com.littlefxc.blog.controller;
import org.springframework.stereotype. Controller ;
import org.springframework.web.bind.annotation. RequestMapping ;
import org.springframework.web.servlet.ModelAndView;
import java.util.Arrays;
/**
* @author fengxuechao
*/
@Controller
public class IndexController <
Эффект от посещения выглядит следующим образом:
1.6 Th: фрагмент, th: вставить, th: заменить, th: включить повторное использование фрагмента кода
Footer.html код страницы:
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Title title >
head >
body >
div th :fragment= «copyright» >
© Авторские права принадлежат Фэн Сюэчао
div >
div th :fragment= «about» >
на
div >
div th :fragment= «links» >
CCTV
div >
body >
html >
Было объявлено три фрагмента кода, авторское право, о и ссылки.
Index.html код страницы:
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :replace= «footer :: copyright» > div >
div th :insert= «footer :: about» > div >
div th :include= «footer :: links» > div >
body >
html >
Первый div ссылается на фрагмент кода авторского права footer.html, а второй div ссылается на фрагмент кода about footer.html.
Понимание двойной двоеточия:Двойное двоеточие «::» используется для ссылки на фрагмент страницы, что немного похоже на синтаксис в PHP. Двойное двоеточие используется для указания прямой ссылки на статические свойства и методы класса.
Эффект заключается в следующем:
Краткое описание:Хорошо видно, что разница между th: insert, th: replace и th: include заключается в том, сохранять ли собственную основную метку. Th: include устарела после 3.0. Вместо нее можно использовать th: replace label.
продвинутый—— Параметр передачи кода фрагмента
Используя фрагмент, мы можем передавать параметры в html-коде. Например, мы определяем top.html, который содержит приглашение «Welcome XXX», и это имя человека XXX необходимо передавать динамически, чтобы мы могли завершить код в максимальной степени Повторно используйте, на этот раз хороший вариант использования, мы должны это сделать. (Красный указывает код клавиши)
Код страницы index.html:
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :each= «name,item:$
span th :text= «$
span th :text= «$
div >
div th :replace= «footer :: copyright» > div >
div th :insert= «footer :: about» > div >
div th :include= «footer :: links» > div >
div th:replace=»footer :: welcome(‘ Фэн Сюэчао ‘)» > div >
body >
html >
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Title title >
head >
body >
div th :fragment= «copyright» >
© Авторские права принадлежат Фэн Сюэчао
div >
div th :fragment= «about» >
на
div >
div th :fragment= «links» >
CCTV
div >
1.7-й: с определением локальных переменных
Код страницы: (красный обозначает код ключа)
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :each= «name,item:$
span th :text= «$
span th :text= «$
div >
div th :replace= «footer :: copyright» > div >
div th :insert= «footer :: about» > div >
div th :include= «footer :: links» > div >
div th :replace= «footer :: welcome(‘ Фэн Сюэчао ‘)» > div >
div >
p th:with=»temp=’ Это локальная переменная ‘» > Локальные переменные: [[$
div >
body >
html >
1.8 th: удалить удалить тег
th: remove используется для удаления HTML-кода. Есть пять th: remove values:
Пример кода index.html выглядит следующим образом: (красный обозначает код ключа)
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :each= «name,item:$
span th :text= «$
span th :text= «$
div >
div th :replace= «footer :: copyright» > div >
div th :insert= «footer :: about» > div >
div th :include= «footer :: links» > div >
div th :replace= «footer :: welcome(‘ Фэн Сюэчао ‘)» > div >
div >
p th :with= «temp=’ Это локальная переменная ‘» > Локальные переменные: [[$
div >
div >
div th:remove=»all» >
span > all span >
span > 1 span >
div >
div th:remove=»body» >
span > body span >
span > 2 span >
div >
div th:remove=»tag» >
span > tag span >
span > 3 span >
div >
div th:remove=»all-but-first» >
span > all-but-first span >
span > 4 span >
div >
div th:remove=»none» >
span > none span >
span > 5 span >
div >
div >
body >
html >
Окончательный эффект отображения выглядит следующим образом:
1.9 Другие ярлыки
2. Использование выражения
2.1 Резюме выражений
2.1.1 Простые выражения
2.1.2 Типы данных
2.1.3 Текстовые операции
2.1.4 Арифметические операции
2.1.5 Булевы операции
Бинарные операторы: и, или логическое отрицание (унарный оператор). False
2.1.6 Условные операторы
Значение сравнения:>, =, package com.littlefxc.blog.controller;
import lombok. Data ;
import org.springframework.stereotype. Controller ;
import org.springframework.web.bind.annotation. RequestMapping ;
import org.springframework.web.servlet.ModelAndView;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author fengxuechao
*/
@Controller
public class IndexController <
@Data
public static class Goods <
private String name ;
private String price ;
private Date createTime ;
>
>
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :object= «$
span th :text= «$
span th :text= «*
span th :text= «$<#dates.format(goods.createTime, 'yyyy-MM-dd HH:mm:ss')>« > span > div >
body >
html >
2.2.3 Выражение ссылки @
Используется для преобразования URL, код выглядит следующим образом:
В выражениях ссылок можно передавать параметры, разделенные запятыми.
Относительный корневой каталог сервера: @ <
2.2.4 Текстовые операции
Текстовая операция делится на две части: написание текста, замена текста
Написание текста:
Замена текста:
2.2.5 Тернарное выражение
2.2.6 Роль двойных скобок
1 234 567 890 Скопируйте код
2.2.7 Встраивание текстовых меток
Хотя стандартные теги могут соответствовать практически всем бизнес-сценариям, в некоторых случаях мы предпочитаем писать HTML-текст напрямую, например:
Здравствуйте, [[$
Существует два способа написания встроенного текста: «[[. ]]» и «[(. )]», которые соответственно действуют как th: text и th: utext, например:
Эффект, который вы видите, таков:
2.3 Обзор объектов выражения
Объекты в выражении могут помочь нам справиться с отображаемым содержимым. Например, класс даты в инструменте выражения может форматировать время. Умелое использование этих встроенных классов может заставить нас использовать Thymeleaf более эффективно.
2.3.1 Основные объекты выражений
2.3.2 Утилита выражения Expression
Для конкретных методов в каждом классе, нажмите, чтобы посмотреть: www.thymeleaf.org/doc/tutoria…
Три, Spring Boot интеграции Thymeleaf
3.1Spring Boot объединяет Thymeleaf в четыре этапа:
Далее посмотрите на конкретные шаги.
3.1.1Шаблонный движок Thomeleaf добавлен в pom.xml
3.1.2 application.properties настроить информацию Thymeleaf
На самом деле, во время разработки вам нужно только настроить spring.thymeleaf.cache = false, остальные настройки являются настройками по умолчанию, и настройка не рекомендуется.
# Включить кеш: рекомендуется включить производство,
spring.thymeleaf.cache = false # Предложить, существует ли шаблон
spring.thymeleaf.check-template-location = true # Значение типа содержимого
spring.thymeleaf.servlet.content-type = text / html # включен
spring.thymeleaf.enabled = true # Кодировка шаблона
spring.thymeleaf.encoding = utf-8 # Список имен представлений, которые следует исключить из разрешения (разделенных запятыми)
spring.thymeleaf.excluded-view-names = # шаблонный режим
spring.thymeleaf.mode = HTML5 # путь хранения шаблона
spring.thymeleaf.prefix = classpath: / templates / # шаблон суффикс
3.1.3 Создайте класс контроллера и напишите код
Мы создаем index.java в папке контроллера, код выглядит следующим образом:
package com.littlefxc.blog.controller;
import lombok. Data ;
import org.springframework.stereotype. Controller ;
import org.springframework.web.bind.annotation. RequestMapping ;
import org.springframework.web.servlet.ModelAndView;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* @author fengxuechao
*/
@Controller
public class IndexController <
@Data
public static class Goods <
private String name ;
private String price ;
private Date createTime ;
>
>
Интерпретация ключевого кода:
3.1.4 Создать шаблон и написать HTML-код
Мы создаем index.html под ресурсами / шаблонами, код выглядит следующим образом:
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Блог Фен Сюэчао title >
head >
body >
div th :each= «name,item:$
span th :text= «$
span th :text= «$
div >
div th :replace= «footer :: copyright» > div >
div th :insert= «footer :: about» > div >
div th :include= «footer :: links» > div >
div th :replace= «footer :: welcome(‘ Фэн Сюэчао ‘)» > div >
div >
p th :with= «temp=’ Это локальная переменная ‘» > Локальные переменные: [[$
div >
div >
div id= «all» th :remove= «all» >
span > all span >
span > 1 span >
div >
div id= «body» th :remove= «body» >
span > body span >
span > 2 span >
div >
div id= «tag» th :remove= «tag» >
span > tag span >
span > 3 span >
div >
div id= «all-but-first» th :remove= «all-but-first» >
span > all-but-first span >
span > 4 span >
div >
div id= «none» th :remove= «none» >
span > none span >
span > 5 span >
div >
div >
p > p >
div th :object= «$
span th :text= «$
span th :text= «*
span th :text= «$<#dates.format(goods.createTime, 'yyyy-MM-dd HH:mm:ss')>« > span > div >
body >
html >
html >
html xmlns: th = «http://www.thymeleaf.org» >
head >
meta charset= «UTF-8» >
title > Title title >
head >
body >
div th :fragment= «copyright» >
© Авторские права принадлежат Фэн Сюэчао
div >
div th :fragment= «about» >
на
div >
div th :fragment= «links» >
CCTV
div >