Рубрики
Без рубрики

Введение в использование Thymeleaf весной

Thymeleaf-это язык шаблонов с отличной интеграцией с Spring. Эта статья содержит введение в использование Thymeleaf в приложении Spring MVC.

Автор оригинала: baeldung.

1. введение

Thymeleaf – это движок шаблонов Java для обработки и создания HTML, XML, JavaScript, CSS и текста.

В этой статье мы обсудим как использовать Thymeleaf с Spring вместе с некоторыми основными примерами использования в слое представления приложения Spring MVC.

Библиотека чрезвычайно расширяема, и ее естественная возможность создания шаблонов гарантирует, что шаблоны могут быть прототипированы без серверной части, что делает разработку очень быстрой по сравнению с другими популярными движками шаблонов, такими как JSP.

2. Интеграция Thymeleaf С Пружиной

Во-первых, давайте рассмотрим конфигурации, необходимые для интеграции с Spring. Для интеграции требуется библиотека thymeleaf-spring .

Добавьте следующие зависимости в файл Maven POM:


    org.thymeleaf
    thymeleaf
    3.0.11.RELEASE


    org.thymeleaf
    thymeleaf-spring5
    3.0.11.RELEASE

Обратите внимание, что для проекта Spring 4 библиотека thymeleaf-spring4 должна использоваться вместо thymeleaf-spring 5 .

Класс SpringTemplateEngine выполняет все шаги настройки. Вы можете настроить этот класс как компонент в файле конфигурации Java:

@Bean
@Description("Thymeleaf Template Resolver")
public ServletContextTemplateResolver templateResolver() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/views/");
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode("HTML5");

    return templateResolver;
}

@Bean
@Description("Thymeleaf Template Engine")
public SpringTemplateEngine templateEngine() {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.setTemplateEngineMessageSource(messageSource());
    return templateEngine;
}

Свойства templateResolver bean префикс и суффикс указывают расположение страниц представления в каталоге webapp и их расширение имени файла соответственно.

Интерфейс ViewResolver в Spring MVC сопоставляет имена представлений, возвращаемые контроллером, с фактическими объектами представления. ThymeleafViewResolver реализует интерфейс ViewResolver и используется для определения того, какие представления Thymeleaf следует отображать, учитывая имя представления.

Последним шагом в интеграции является добавление ThymeleafViewResolver в качестве компонента:

@Bean
@Description("Thymeleaf View Resolver")
public ThymeleafViewResolver viewResolver() {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine());
    viewResolver.setOrder(1);
    return viewResolver;
}

3. Тимелиф в весеннем ботинке

Spring Boot обеспечивает автоматическую настройку для Thymeleaf путем добавления spring-boot-starter-thymeleaf зависимости:


    org.springframework.boot
    spring-boot-starter-thymeleaf
    2.3.3.RELEASE

Явная настройка не требуется. По умолчанию HTML-файлы должны быть помещены в папку ресурсы/шаблоны .

4. Отображение значений из Источника сообщения (Файлы свойств)

Атрибут th:text=”#{key}” tag можно использовать для отображения значений из файлов свойств. Для этого файл свойств должен быть настроен как MessageSource bean:

@Bean
@Description("Spring Message Resolver")
public ResourceBundleMessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasename("messages");
    return messageSource;
}

Вот HTML-код Thymeleaf для отображения значения, связанного с ключом welcome.message :

5. Отображение атрибутов Модели

5.1. Простые атрибуты

Атрибут th:text=”${имя атрибута}” tag можно использовать для отображения значения атрибутов модели. Давайте добавим атрибут модели с именем serverTime в класс контроллера:

model.addAttribute("serverTime", dateFormat.format(new Date()));

HTML-код для отображения значения атрибута server Time :

Current time is 

5.2. Атрибуты коллекции

Если атрибут модели представляет собой набор объектов, атрибут th:each tag можно использовать для итерации по нему. Давайте определим класс Student model с двумя полями, id и name :

public class Student implements Serializable {
    private Integer id;
    private String name;
    // standard getters and setters
}

Теперь мы добавим список студентов в качестве атрибута модели в класс контроллера:

List students = new ArrayList();
// logic to build student data
model.addAttribute("students", students);

Наконец, мы можем использовать код шаблона Thymeleaf для перебора списка учащихся и отображения всех значений полей:


    
        
        
    

6. Условная Оценка

6.1. если и если

Атрибут th:if=”${condition}” используется для отображения раздела представления, если условие выполнено. Атрибут th:unless=”${condition}” используется для отображения раздела представления, если условие не выполнено.

Добавьте поле пол в модель Студент :

public class Student implements Serializable {
    private Integer id;
    private String name;
    private Character gender;
    
    // standard getters and setters
}

Предположим, что это поле имеет два возможных значения (M или F) для указания пола учащегося. Если мы хотим отобразить слова “Мужчина” или “Женщина” вместо одного символа, мы могли бы сделать это, используя следующий код Thymeleaf:


     
    

6.2. выключатель и корпус

Атрибуты th:switch и th:case используются для условного отображения содержимого с использованием структуры оператора switch.

Предыдущий код может быть переписан с использованием атрибутов th:switch и th:case :


     
    

7. Обработка Пользовательского Ввода

Ввод формы можно обрабатывать с помощью атрибутов th:action=”@{url}” и th:object=”${object}” . th:действие используется для предоставления URL-адреса действия формы, а th:объект используется для указания объекта, к которому будут привязаны отправленные данные формы. Отдельные поля сопоставляются с помощью атрибута th:field=”*{name}” , где name является соответствующим свойством объекта.

Для класса Student мы можем создать форму ввода:

В приведенном выше коде /save Student – это URL-адрес действия формы, а student – объект, содержащий отправленные данные формы.

Контроллер Student класс обрабатывает отправку формы:

@Controller
public class StudentController {
    @RequestMapping(value = "/saveStudent", method = RequestMethod.POST)
    public String saveStudent(@ModelAttribute Student student, BindingResult errors, Model model) {
        // logic to process input data
    }
}

В приведенном выше коде аннотация @RequestMapping сопоставляет метод контроллера с URL-адресом, указанным в форме. Аннотированный метод save Student() выполняет необходимую обработку для представленной формы. Аннотация @ModelAttribute привязывает поля формы к объекту student .

8. Отображение Ошибок Проверки

Функция #fields.hasErrors() может использоваться для проверки наличия ошибок проверки в поле. Функция #fields.errors() может использоваться для отображения ошибок для определенного поля. Имя поля является входным параметром для обеих этих функций.

HTML-код для итерации и отображения ошибок для каждого из полей в форме:

Вместо имени поля вышеуказанные функции принимают подстановочный знак * или константу вызов для обозначения всех полей. Атрибут th:each используется для перебора нескольких ошибок, которые могут присутствовать для каждого из полей.

Предыдущий HTML-код переписан с использованием подстановочного знака * :

или с помощью константы все :

Аналогично, глобальные ошибки в Spring могут отображаться с помощью константы global .

HTML-код для отображения глобальных ошибок:

Атрибут th:errors также может использоваться для отображения сообщений об ошибках. Предыдущий код для отображения ошибок в форме можно переписать с помощью атрибута th:errors :

9. Использование конверсий

Синтаксис двойной скобки {{}} используется для форматирования данных для отображения. При этом используются форматтеры , настроенные для этого типа поля в компоненте ConversionService контекстного файла.

Поле имени в классе Student отформатировано:


    

В приведенном выше коде используется класс Name Formatter , настроенный путем переопределения метода addFormatters() из интерфейса WebMvcConfigurer . Для этой цели наш класс @Configuration переопределяет класс WebMvcConfigurerAdapter :

@Configuration
public class WebMVCConfig extends WebMvcConfigurerAdapter {
    // ...
    @Override
    @Description("Custom Conversion Service")
    public void addFormatters(FormatterRegistry registry) {
        registry.addFormatter(new NameFormatter());
    }
}

Класс Name Formatter реализует интерфейс Spring Formatter .

Утилита #conversations также может использоваться для преобразования объектов для отображения. Синтаксис функции утилиты – #conversations.convert(объект, класс) где Объект преобразуется в Класс тип.

Для отображения студент объект процент поле с удаленной дробной частью:


    

10. Заключение

В этом уроке мы рассмотрели, как интегрировать и использовать Thymeleaf в приложении Spring MVC.

Мы также видели примеры того, как отображать поля, принимать ввод, отображать ошибки проверки и преобразовывать данные для отображения. Рабочая версия кода, показанного в этой статье, доступна в репозитории GitHub .