Hogyan kell dolgozni a dátumokkal a Thymeleaf-ben

1. Bemutatkozás

A Thymeleaf egy Java sablonmotor, amelyet úgy terveztek, hogy közvetlenül működjön együtt a Springszel. A Thymeleaf and Spring bevezetőjéhez olvassa el ezt az írást.

Ezen alapvető funkciók mellett a Thymeleaf olyan segédprogram objektumokat kínál nekünk, amelyek segítenek az alkalmazásunkban gyakori feladatok végrehajtásában.

Ebben a cikkben az új és a régi Java feldolgozását és formázását tárgyaljuk Dátum osztályok a Thymeleaf 3.0 néhány funkciójával.

2. Maven-függőségek

Először nézzük meg a Thymeleaf és Spring integrálásához szükséges konfigurációt pom.xml:

 org.thymeleaf thymeleaf 3.0.11.KÖZLEMÉNY org. thymeleaf thymeleaf-spring5 3.0.11. 

A legújabb verziói thymeleaf és kakukkfű-tavasz5 megtalálható a Maven Central oldalon. Vegye figyelembe, hogy egy 4. tavaszi projekt esetében a tűlevelű-tavasz4 könyvtár helyett kell használni kakukkfű-tavasz5.

Sőt, az új Java 8-mal való együttműködés érdekében Dátum osztályok, a következő függőséget adjuk hozzá a mi pom.xml:

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

A thymeleaf extrák egy opcionális modul, amelyet a hivatalos Thymeleaf csapat teljes mértékben támogat, és amelyet a Java 8 Time API-val való kompatibilitás érdekében hoztak létre. Hozzáad egy #időbeli kifogásolja a Kontextus mint segédprogram objektum processzor a kifejezés kiértékelésekor. Ez azt jelenti, hogy fel lehet használni az Object-Graph Navigation Language (OGNL) és a Spring Expression Language (SpringEL) kifejezések értékelésére.

3. Régi és új: java.util és java.time

A Idő A csomag egy új dátum, idő és naptár API a Java SE platformhoz. A fő különbség a régi örökség között Dátum és az, hogy az új API megkülönbözteti az idővonal gépi és emberi nézeteit. A gépnézet az integrálértékek sorozatát tárja fel a korszak, míg a nézet számos mezőt mutat (pl. év vagy nap).

Dolgozni az újval Idő csomagot, be kell állítanunk a sablonmotorunkat az új használatára Java8TimeDialect:

privát ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine motor = új SpringTemplateEngine (); engine.addDialect (új Java8TimeDialect ()); motor.setTemplateResolver (templateResolver); visszatérő motor; }

Ez hozzáadja a #időbeli objektum, hasonló a standard dialektuséhoz, lehetővé téve a formázását és létrehozását Időbeli tárgyak a Thymeleaf sablonokból.

Az új és a régi osztályok feldolgozásának tesztelése érdekében létrehozzuk a következő változókat, és modellobjektumként hozzáadjuk őket a vezérlő osztályunkhoz:

model.addAttribute ("standardDate", új Date ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("időbélyeg", Instant.now ());

Most készen állunk a használatra Kifejezés és TemporalsSegédprogram objektumok Thymeleaf nyújtotta.

3.1. Formátum dátumok

Az első funkció, amelyet át akarunk fedni, az a formázása Dátum objektum (amely hozzáadódik a Spring modell paramétereihez). Úgy döntöttünk, hogy a ISO8601 formátum:

Nem számít, milyen a miénk Dátum a háttéroldalon volt beállítva, a kiválasztott szabványnak megfelelően jelenik meg. A standardDate a # feldolgozni fogjadátumokat hasznosság. Az új LocalDateTime,LocalDate és Azonnali osztályokat fogja feldolgozni a #időbeli hasznosság. Ez a végeredmény, amelyet a böngészőben láthatunk:

Ez a végeredmény, amelyet a böngészőben láthatunk:

Sőt, ha manuálisan szeretnénk beállítani a formátumot, megtehetjük az alábbiak használatával:

Amint megfigyelhetjük, nem tudjuk feldolgozni a Azonnali osztály #temporals.format (…) - ez azt eredményezi UnsupportedTemporalTypeException. Sőt, a LocalDate csak akkor lehetséges, ha csak az adott dátummezőket adjuk meg, kihagyva az időmezőket.

A végeredmény:

3.2. Adott dátummezők beszerzése

Annak érdekében, hogy a java.util.Dátum osztályban a következő segédobjektumokat kell használnunk:

$ {# dátum.nap (dátum)} $ {# dátum.hónap (dátum)} $ {# dátum.hónapNév (dátum)} $ {# dátum.hónapNévRövid (dátum)} $ {# dátum.év (dátum)} $ {# date.dayOfWeek (dátum)} $ {# dátumot.dayOfWeekName (dátum)} $ {# dátum.dayOfWeekNameShort (dátum)} $ {# dátum.hour (dátum)} $ {# dátum.minute (dátum)} $ {# dátum.second (dátum)} $ {# dátum.millisecond (dátum)}

Az újért java.time csomagot kell tartanunkidőbeli segédprogramok:

$ {# temporals.day (dátum)} $ {# temporals.month (dátum)} $ {# temporals.monthName (dátum)} $ {# temporals.monthNameShort (dátum)} $ {# temporals.year (dátum)} $ {# 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)}

Nézzünk meg néhány példát. Először mutassuk meg a hét mai napját:

Ezután mutassuk meg a hétköznap nevét:

És végül mutassuk meg a nap aktuális másodpercét:

Felhívjuk figyelmét, hogy az időalkatrészekkel való munkavégzéshez használnia kell LocalDateTime, as LocalDate hibát fog dobni.

4. Következtetés

Ebben a gyors bemutatóban megvitattuk a Java-t Dátum a Thymeleaf keretrendszer 3.0 verziójában megvalósított feldolgozási funkciók.

A bemutató teljes megvalósítása megtalálható a GitHub projektben - ez egy Maven-alapú projekt, amelyet könnyű importálni és futtatni.

Hogyan kell tesztelni? Javaslatunk, hogy először a böngészőben játsszon a kóddal, majd ellenőrizze a meglévő JUnit teszteket is.

Felhívjuk figyelmét, hogy példáink nem fedik le a Thymeleaf összes rendelkezésre álló lehetőségét. Ha meg akar ismerkedni a segédprogramok minden típusával, akkor nézze meg a Tavaszi és a Thymeleaf kifejezésekről szóló cikkünket.