«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.