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.