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.


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