1. введение
Thymeleaf – это движок шаблонов Java, предназначенный для работы непосредственно с Spring. Для введения в Thymeleaf и Spring взгляните на эту запись .
Помимо этих основных функций, Thymeleaf предлагает нам набор служебных объектов, которые помогут нам выполнять общие задачи в нашем приложении.
В этой статье мы обсудим обработку и форматирование новых и старых классов Java Date с несколькими функциями Thymeleaf 3.0.
2. Зависимости Maven
Во-первых, давайте посмотрим конфигурацию, необходимую для интеграции Thymeleaf с Spring в ваш pom.xml :
org.thymeleaf thymeleaf 3.0.11.RELEASE org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE
Последние версии thymeleaf и thymeleaf-spring 5 можно найти на Maven Central. Обратите внимание, что для проекта Spring 4 библиотека thymeleaf-spring4 должна использоваться вместо thymeleaf-spring 5 .
Кроме того, для работы с новыми классами Java 8 Date мы добавим в ваш следующую зависимость pom.xml :
org.thymeleaf.extras thymeleaf-extras-java8time 3.0.4.RELEASE
thymeleaf extras – это дополнительный модуль, полностью поддерживаемый официальной командой Thymeleaf, который был создан для совместимости с Java 8 Time API. Он добавляет объект # temporals в Контекст в качестве процессора служебных объектов во время оценки выражений. Это означает, что его можно использовать для оценки выражений в языке навигации объектных графов (OGNL) и языке выражений Spring (SpringEL).
3. Старое и новое: java.util и java.time
Пакет Time – это новый API даты, времени и календаря для платформы Java SE. Основное различие между старым наследием Data и заключается в том, что новый API различает машинные и человеческие представления временной шкалы. Машинное представление показывает последовательность интегральных значений относительно эпохи, в то время как представление показывает набор полей (например, год или день).
Для работы с новым пакетом Time нам необходимо настроить механизм шаблонов для использования нового диалекта Java 8 Time/|:
private ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.addDialect(new Java8TimeDialect()); engine.setTemplateResolver(templateResolver); return engine; }
Это добавит объект # temporals , аналогичный объектам в стандартном диалекте, что позволит форматировать и создавать объекты Temporals из шаблонов Thymeleaf.
Чтобы проверить обработку новых и старых классов, мы создадим следующие переменные и добавим их в качестве объектов модели в наш класс контроллера:
model.addAttribute("standardDate", new Date()); model.addAttribute("localDateTime", LocalDateTime.now()); model.addAttribute("localDate", LocalDate.now()); model.addAttribute("timestamp", Instant.now());
Теперь мы готовы использовать Выражение и Временные | Служебные объекты , предоставленные Thymeleaf.
3.1. Форматирование Дат
Первая функция, которую мы хотим охватить, – это форматирование объекта Date (который добавляется к параметрам модели Spring). Мы решили использовать формат ISO8601 :
Format ISO
Независимо от того, как наша Дата была установлена на внутренней стороне, она будет отображаться в соответствии с выбранным стандартом. стандартная дата будет обработана утилитой # dates . Новые классы LocalDateTime, | LocalDate и Instant будут обрабатываться утилитой # temporals . Это конечный результат, который мы увидим в браузере:
Это конечный результат, который мы увидим в браузере:
Более того, если мы хотим установить формат вручную, мы можем сделать это с помощью:
Format manually
Как мы можем наблюдать, мы не можем обработать класс Instant с помощью # temporals.format(…) — это приведет к исключению UnsupportedTemporalTypeException . Кроме того, форматирование Локальных данных возможно только в том случае, если мы будем указывать только конкретные поля данных, пропуская поля времени.
Конечный результат:
3.2. Получение Конкретных Полей Даты
Для того, чтобы получить конкретные поля java.util.Date class, мы должны использовать следующие служебные объекты:
${#dates.day(date)} ${#dates.month(date)} ${#dates.monthName(date)} ${#dates.monthNameShort(date)} ${#dates.year(date)} ${#dates.dayOfWeek(date)} ${#dates.dayOfWeekName(date)} ${#dates.dayOfWeekNameShort(date)} ${#dates.hour(date)} ${#dates.minute(date)} ${#dates.second(date)} ${#dates.millisecond(date)}
Для нового пакета java.time мы должны придерживаться # temporals utilities:
${#temporals.day(date)} ${#temporals.month(date)} ${#temporals.monthName(date)} ${#temporals.monthNameShort(date)} ${#temporals.year(date)} ${#temporals.dayOfWeek(date)} ${#temporals.dayOfWeekName(date)} ${#temporals.dayOfWeekNameShort(date)} ${#temporals.hour(date)} ${#temporals.minute(date)} ${#temporals.second(date)} ${#temporals.millisecond(date)}
Давайте рассмотрим несколько примеров. Во-первых, давайте покажем сегодняшний день недели:
Show only which day of a week
Далее, давайте покажем название дня недели:
Show the name of the week day
И, наконец, давайте покажем текущую секунду дня:
Show the second of the day
Обратите внимание, что для работы с частями времени вам нужно будет использовать LocalDateTime , так как Локальные данные выдадут ошибку.
4. Заключение
В этом кратком руководстве мы обсудили функции обработки Java Data , реализованные в платформе Thymeleaf версии 3.0.
Полную реализацию этого руководства можно найти в проекте GitHub – это проект на основе Maven, который легко импортировать и запускать.
Как проверить? Наше предложение состоит в том, чтобы сначала поиграть с кодом в браузере, а затем проверить наши существующие тесты JUnit.
Пожалуйста, обратите внимание, что наши примеры не охватывают все доступные варианты в Thymeleaf. Если вы хотите узнать обо всех типах утилит, ознакомьтесь с нашей статьей, посвященной выражениям Spring и Thymeleaf .