«1. Введение

Thymeleaf — это шаблонизатор Java для обработки и создания HTML, XML, JavaScript, CSS и простого текста. Чтобы познакомиться с Thymeleaf и Spring, ознакомьтесь с этой статьей.

Помимо этих основных функций, Thymeleaf предлагает нам набор служебных объектов, которые помогут нам выполнять общие задачи в нашем приложении.

В этой статье мы обсудим основную функцию Thymeleaf 3.0 — объекты Expression Utility в приложениях Spring MVC. В частности, мы рассмотрим тему обработки дат, календарей, строк, объектов и многого другого.

2. Зависимости Maven

Во-первых, давайте посмотрим на необходимую конфигурацию, необходимую для интеграции Thymeleaf со Spring. В наших зависимостях требуется библиотека тимелеаф-спринг:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

Обратите внимание, что для проекта Spring 4 вместо тимелеаф-спринг5 необходимо использовать библиотеку тимелеаф-спринг4. Последнюю версию зависимостей можно найти здесь.

3. Объекты Expression Utility

Перед рассмотрением основной темы этой статьи, если вы хотите сделать шаг назад и посмотреть, как настроить Thymeleaf 3.0 в своем проекте веб-приложения, ознакомьтесь с этим руководством.

Для целей данной статьи мы создали контроллер Spring и HTML-файл, чтобы протестировать все функции, которые мы собираемся обсудить. Ниже приведен полный список доступных вспомогательных объектов и их функций:

    #dates: вспомогательные методы для объектов java.util.Date #calendars: аналогично #dates, используемые для объектов java.util.Calendar #numbers: вспомогательные методы для форматирование числовых объектов #strings: служебные методы для строковых объектов #objects: служебные методы для класса объектов Java в целом #bools: служебные методы для логического вычисления #arrays: служебные методы для массивов #lists: служебные методы для списков #sets: служебные методы для наборы #maps: служебные методы для карт #aggregates: служебные методы для создания агрегатов на массивах или коллекциях #messages: служебные методы для получения внешних сообщений внутри переменных expressions

3.1. Объекты дат

Первая функция, которую мы хотим обсудить, — это обработка объектов java.util.Date. Объекты утилиты выражений, отвечающие за обработку даты, начинаются с #dates.functionName(). Первая функция, которую мы хотим охватить, — это форматирование объекта Date (который добавляется к параметрам модели Spring).

Допустим, мы хотим использовать формат ISO8601:

<p th:text="${#dates.formatISO(date)}"></p>

Независимо от того, как наша дата была установлена ​​на стороне сервера, она должна отображаться в соответствии с этим стандартом. Более того, если мы хотим уточнить формат, мы можем указать его вручную:

<p th:text="${#dates.format(date, 'dd-MM-yyyy HH:mm')}"></p>

Функция принимает в качестве параметров две переменные: дату и ее формат.

Наконец, вот несколько таких же полезных функций, которые мы можем использовать:

<p th:text="${#dates.dayOfWeekName(date)}"></p>
<p th:text="${#dates.createNow()}"></p>
<p th:text="${#dates.createToday()}"></p>

В первой мы получим название дня недели, во второй создадим новый объект Date, а наконец, мы создадим новую дату со временем, установленным на 00:00.

3.2. Объекты календаря

Утилиты календаря очень похожи на обработку дат, за исключением того, что мы используем экземпляр объекта java.util.Calendar:

<p th:text="${#calendars.formatISO(calendar)}"></p>
<p th:text="${#calendars.format(calendar, 'dd-MM-yyyy HH:mm')}"></p>
<p th:text="${#calendars.dayOfWeekName(calendar)}"></p>

Единственная разница заключается в том, когда мы хотим создать новый экземпляр календаря: ~ ~~

<p th:text="${#calendars.createNow().getTime()}"></p>
<p th:text="${#calendars.createToday().getFirstDayOfWeek()}"></p>

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

3.3. Обработка чисел

Еще одна полезная функция — обработка чисел. Давайте сосредоточимся на переменной num, созданной случайным образом с типом double:

<p th:text="${#numbers.formatDecimal(num,2,3)}"></p>
<p th:text="${#numbers.formatDecimal(num,2,3,'COMMA')}"></p>

В первой строке мы форматируем десятичное число, устанавливая минимум целых цифр и точные десятичные цифры. Во втором, помимо целых и десятичных цифр, мы указали десятичный разделитель. Возможные варианты: ТОЧКА, ЗАПЯТАЯ, ПРОБЕЛ, НЕТ или ПО УМОЛЧАНИЮ (в зависимости от региона).

Есть еще одна функция, которую мы хотим представить в этом параграфе. Это создание последовательности целых чисел:

<p th:each="number: ${#numbers.sequence(0,2)}">
    <span th:text="${number}"></span>
</p>
<p th:each="number: ${#numbers.sequence(0,4,2)}">
    <span th:text="${number}"></span>
</p>

«

«В первом примере мы заставили Thymeleaf сгенерировать последовательность от 0 до 2, тогда как во втором в дополнение к минимальному и максимальному значению мы предоставили определение шага (в этом примере значения изменятся на два).

Обратите внимание, что интервал закрыт с обеих сторон.

3.4. Операции со строками

Это наиболее полная функция служебных объектов выражений.

Начать описание можно с утилиты проверки пустых или нулевых объектов String. Довольно часто для этого разработчики использовали методы Java внутри тегов Thymeleaf, что может быть небезопасно для нулевых объектов.

<p th:text="${#strings.isEmpty(string)}"></p>
<p th:text="${#strings.isEmpty(nullString)}"></p>
<p th:text="${#strings.defaultString(emptyString,'Empty String')}"></p>

Вместо этого мы можем сделать так:

Первая строка не пуста, поэтому метод вернет false. Вторая строка равна нулю, поэтому мы получим true. Наконец, мы можем использовать метод #strings.defaultString(…) для указания значения по умолчанию, если String будет пустым.

<p th:text="${#strings.indexOf(name,frag)}"></p>
<p th:text="${#strings.substring(name,3,5)}"></p>
<p th:text="${#strings.substringAfter(name,prefix)}"></p>
<p th:text="${#strings.substringBefore(name,suffix)}"></p>
<p th:text="${#strings.replace(name,'las','ler')}"></p>

Есть много других методов. Все они работают не только со строками, но и с Java.Collections. Например, для использования операций, связанных с подстроками:

<p th:text="${#strings.equals(first, second)}"></p>
<p th:text="${#strings.equalsIgnoreCase(first, second)}"></p>
<p th:text="${#strings.concat(values...)}"></p>
<p th:text="${#strings.concatReplaceNulls(nullValue, values...)}"></p>

или для использования сравнения и конкатенации, безопасных для нулей:

<p th:text="${#strings.abbreviate(string,5)} "></p>
<p th:text="${#strings.capitalizeWords(string)}"></p>

Наконец, есть функции, связанные со стилем текста, которые всегда сохраняют синтаксис. то же самое:

В первом методе сокращенный текст будет иметь максимальный размер n. Если текст больше, он будет обрезан и закончен с помощью «…».

Во втором методе мы будем писать слова с большой буквы.

3.5. Агрегаты

<p th:text="${#aggregates.sum(array)}"></p>
<p th:text="${#aggregates.avg(array)}"></p>
<p th:text="${#aggregates.sum(set)}"></p>
<p th:text="${#aggregates.avg(set)}"></p>

Последняя, ​​но не менее важная функция, которую мы хотим здесь обсудить, — это агрегаты. Они являются нулевыми и предоставляют утилиты для вычисления среднего значения или суммы из массива или любой другой коллекции:

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

В этой статье мы обсудили функции объектов Expression Utility, реализованные в среде Thymeleaf версии 3.0. .

Полную реализацию этого руководства можно найти в проекте GitHub.

Как проверить? Мы предлагаем сначала поиграть с браузером, а затем также проверить существующие тесты JUnit.