Ako pracovať s dátumami v Thymeleaf

1. Úvod

Thymeleaf je šablónový modul Java navrhnutý pre prácu priamo s Spring. Pre úvod do Thymeleaf a Spring si prečítajte tento článok.

Okrem týchto základných funkcií nám Thymeleaf ponúka aj sadu úžitkových objektov, ktoré nám pomôžu vykonávať bežné úlohy v našej aplikácii.

V tomto článku sa budeme zaoberať spracovaním a formátovaním novej a starej Javy Dátum triedy s hŕstkou funkcií Thymeleaf 3.0.

2. Maven závislosti

Najskôr sa pozrime na konfiguráciu potrebnú na integráciu Thymeleaf s Spring do našej pom.xml:

 org.thymeleaf thymeleaf 3.0.11.RELEASE org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE 

Najnovšie verzie servera thymeleaf a thymeleaf-spring5 nájdete na Maven Central. Upozorňujeme, že v prípade projektu na jar 4 sa projekt thymeleaf-spring4 namiesto. musí byť použitá knižnica thymeleaf-spring5.

Navyše, aby som mohol pracovať s novým Java 8 Dátum triedy, pridáme do našej nasledujúcej závislosti pom.xml:

 org.thymeleaf.extras thymeleaf-extras-java8time 3.0.4.RELEASE 

The doplnky k týmusovým listom je voliteľný modul plne podporovaný oficiálnym tímom Thymeleaf, ktorý bol vytvorený pre kompatibilitu s rozhraním Java 8 Time API. Pridáva #dočasné namietať proti Kontext ako procesor úžitkových objektov počas hodnotení výrazov. To znamená, že sa dá použiť na vyhodnotenie výrazov v Object-Graph Navigation Language (OGNL) a Spring Expression Language (SpringEL).

3. Staré a nové: java.util a java.time

The Čas balíček je nové rozhranie API pre dátum, čas a kalendár pre platformu Java SE. Hlavný rozdiel medzi starým odkazom Dátum a je to, že nové API rozlišuje medzi strojovým a ľudským pohľadom na časovú os. Pohľad stroja odhaľuje sled celých hodnôt vo vzťahu k epocha, zatiaľ čo pohľad odhaľuje množinu polí (napr. rok alebo deň).

Pracovať s novým Čas balíka, musíme nakonfigurovať náš šablónový modul tak, aby používal nový Java8TimeDialect:

private ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine engine = new SpringTemplateEngine (); engine.addDialect (nový Java8TimeDialect ()); engine.setTemplateResolver (templateResolver); spätný motor; }

Týmto sa pridá #dočasné objekt podobný tým v štandardnom dialekte, ktorý umožňuje formátovanie a vytváranie Dočasný objekty zo šablón Thymeleaf.

Na otestovanie spracovania nových a starých tried vytvoríme nasledujúce premenné a pridáme ich ako modelové objekty do našej triedy ovládačov:

model.addAttribute ("standardDate", nový dátum ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("timestamp", Instant.now ());

Teraz sme pripravení na použitie Vyjadrenie a DočasníÚžitkové predmety poskytuje Thymeleaf.

3.1. Dátumy formátovania

Prvou funkciou, ktorú chceme pokryť, je formátovanie a Dátum objekt (ktorý je pridaný k parametrom modelu Spring). Rozhodli sme sa použiť ISO8601 formát:

Bez ohľadu na to, aké sú naše Dátum bol nastavený na zadnej strane, bude sa zobrazovať podľa zvolenej normy. The standardDate bude spracovaný #termíny užitočnosť. Nové LocalDateTime,LocalDate a Okamžité triedy budú spracované #dočasné užitočnosť. Toto je konečný výsledok, ktorý uvidíme v prehliadači:

Toto je konečný výsledok, ktorý uvidíme v prehliadači:

Navyše, ak chceme formát nastaviť manuálne, môžeme to urobiť pomocou:

Ako môžeme pozorovať, nemôžeme spracovať Okamžité trieda s #temporals.format (…) - vyústi do UnsupportedTemporalTypeException. Okrem toho formátovanie LocalDate je možné, iba ak zadáme iba konkrétne polia s dátumom a časové polia preskočíme.

Konečný výsledok:

3.2. Získajte konkrétne polia s dátumom

Za účelom získania špecifických polí java.util.Date triedy, mali by sme použiť nasledujúce úžitkové objekty:

$ {# dates.day (date)} $ {# dates.month (date)} $ {# dates.monthName (date)} $ {# dates.monthNameShort (date)} $ {# dates.year (date)} $ {# dates.dayOfWeek (dátum)} $ {# dates.dayOfWeekName (dátum)} $ {# dates.dayOfWeekNameShort (dátum)} $ {# dates.hour (dátum)} $ {# dates.minute (dátum)} $ {# dates.second (date)} $ {# dates.millisecond (date)}

Pre nové java.time balíček, mali by sme sa držať #dočasné pomôcky:

$ {# temporals.day (date)} $ {# temporals.month (date)} $ {# temporals.monthName (date)} $ {# temporals.monthNameShort (date)} $ {# temporals.year (date)} $ {# temporals.dayOfWeek (dátum)} $ {# temporals.dayOfWeekName (dátum)} $ {# temporals.dayOfWeekNameShort (dátum)} $ {# temporals.hour (dátum)} $ {# temporals.minute (dátum)} $ {# temporals.second (dátum)} $ {# temporals.millisecond (dátum)}

Pozrime sa na niekoľko príkladov. Najprv si ukážeme dnešný deň v týždni:

Ďalej si ukážeme názov všedného dňa:

A na záver si ukážeme aktuálnu sekundu dňa:

Upozorňujeme, že na prácu s časovými časťami budete musieť použiť LocalDateTime, as LocalDate vyhodí chybu.

4. Záver

V tomto rýchlom výučbe sme diskutovali o Jave Dátum funkcie spracovania implementované v rámci Thymeleaf, verzia 3.0.

Celú implementáciu tohto tutoriálu nájdete v projekte GitHub - jedná sa o projekt založený na Maven, ktorý sa ľahko importuje a spúšťa.

Ako testovať? Náš návrh je najskôr sa pohrať s kódom v prehliadači, až potom skontrolovať aj naše existujúce testy JUnit.

Upozorňujeme, že naše príklady nepokrývajú všetky dostupné možnosti v Thymeleaf. Ak sa chcete dozvedieť viac o všetkých druhoch pomôcok, pozrite si náš článok venovaný výrazom Spring and Thymeleaf Expressions.


$config[zx-auto] not found$config[zx-overlay] not found