Hvordan jobbe med datoer i Thymeleaf
1. Introduksjon
Thymeleaf er en Java-malmotor designet for å fungere direkte med Spring. For en introduksjon til Thymeleaf og Spring, ta en titt på denne oppskriften.
I tillegg til disse grunnleggende funksjonene, tilbyr Thymeleaf oss et sett med verktøyobjekter som vil hjelpe oss med å utføre vanlige oppgaver i applikasjonen vår.
I denne artikkelen vil vi diskutere prosessering og formatering av den nye og gamle Java Dato klasser med en håndfull funksjoner i Thymeleaf 3.0.
2. Maven-avhengigheter
La oss først se konfigurasjonen som trengs for å integrere Thymeleaf med Spring i vår pom.xml:
org.thymeleaf thymeleaf 3.0.11.RELEASE org.thymeleaf thymeleaf-spring5 3.0.11.RELEASE
De siste versjonene av thymeleaf og thymeleaf-spring5 kan du finne på Maven Central. Merk at, for et Spring 4-prosjekt, thymeleaf-spring4 biblioteket må brukes i stedet for thymeleaf-spring5.
Videre for å jobbe med nye Java 8 Dato klasser, vil vi legge til følgende avhengighet til vår pom.xml:
org.thymeleaf.extras thymeleaf-extras-java8time 3.0.4.RELEASE
De tymeleaf statister er en valgfri modul, fullt støttet av det offisielle Thymeleaf-teamet, som ble opprettet for kompatibilitet med Java 8 Time API. Det legger til et #temporals motsette seg Kontekst som en verktøyobjektprosessor under uttrykksevalueringer. Dette betyr at den kan brukes til å evaluere uttrykk i Object-Graph Navigation Language (OGNL) og Spring Expression Language (SpringEL).
3. Gammelt og nytt: java.util og java.time
De Tid pakken er en ny API for dato, tid og kalender for Java SE-plattformen. Hovedforskjellen mellom gammel arv Dato og er at den nye API-en skiller mellom maskin- og menneskesyn på en tidslinje. Maskinvisningen avslører en sekvens av integrerte verdier i forhold til epoke, mens visningen avslører et sett med felt (f.eks. år eller dag).
Å jobbe med det nye Tid pakken, må vi konfigurere malmotoren vår for å bruke den nye Java8TimeDialect:
private ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine engine = new SpringTemplateEngine (); engine.addDialect (ny Java8TimeDialect ()); engine.setTemplateResolver (templateResolver); returmotor; }
Dette vil legge til #temporals objekt som ligner de i Standard Dialect, slik at formatering og oppretting av Temporal objekter fra Thymeleaf-maler.
For å teste behandlingen av nye og gamle klasser, oppretter vi følgende variabler og legger dem til som modellobjekter til kontrollerklassen vår:
model.addAttribute ("standardDate", ny dato ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("tidsstempel", Instant.now ());
Nå er vi klare til bruk Uttrykk og TemporaleUtility Objects levert av Thymeleaf.
3.1. Formatér datoer
Den første funksjonen vi ønsker å dekke er formateringen av en Dato objekt (som legges til vårmodellparametrene). Vi bestemte oss for å bruke ISO8601 format:
Uansett hvordan vår Dato ble satt på baksiden, vil den vises i samsvar med valgt standard. De standarddato skal behandles av #datoer nytte. Den nye LocalDateTime,LocalDate og Umiddelbar klasser skal behandles av #temporals nytte. Dette er det endelige resultatet vi ser i nettleseren:
Dette er det endelige resultatet vi ser i nettleseren:
Videre, hvis vi vil stille formatet manuelt, kan vi gjøre det ved å bruke:
Som vi kan observere, kan vi ikke behandle Umiddelbar klasse med #temporals.format (...) - det vil resultere i Ikke-støttetTemporalTypeException. Videre formatering av LocalDate er bare mulig hvis vi bare spesifiserer de spesifikke datofeltene og hopper over tidsfeltene.
Det endelige resultatet:
3.2. Få spesifikke datofelt
For å oppnå de spesifikke feltene i java.util.Date klasse, bør vi bruke følgende verktøyobjekter:
$ {# 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)}
For det nye java.time pakken, bør vi holde oss til #temporals verktøy:
$ {# 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)}
La oss se på noen få eksempler. La oss først vise dagens ukedag:
La oss deretter vise navnet på ukedagen:
Og til slutt, la oss vise dagens sekund på dagen:
Vær oppmerksom på at du må bruke for å jobbe med tidsdeler LocalDateTime, som LocalDate vil kaste en feil.
4. Konklusjon
I denne raske opplæringen diskuterte vi Java Dato behandlingsfunksjoner implementert i Thymeleaf framework, versjon 3.0.
Den fulle implementeringen av denne veiledningen finner du i GitHub-prosjektet - dette er et Maven-basert prosjekt som er enkelt å importere og kjøre.
Hvordan teste? Vårt forslag er å leke med koden først i en nettleser, og deretter sjekke våre eksisterende JUnit-tester også.
Vær oppmerksom på at eksemplene våre ikke dekker alle tilgjengelige alternativer i Thymeleaf. Hvis du vil lære om alle typer verktøy, kan du ta en titt på artikkelen vår om Spring and Thymeleaf Expressions.