Sådan arbejder du med datoer i Thymeleaf

1. Introduktion

Thymeleaf er en Java-skabelonmotor designet til at arbejde direkte med Spring. For en introduktion til Thymeleaf og Spring, se på denne opskrivning.

Udover disse grundlæggende funktioner tilbyder Thymeleaf os et sæt hjælpeprojekter, der hjælper os med at udføre almindelige opgaver i vores applikation.

I denne artikel vil vi diskutere behandling og formatering af den nye og gamle Java Dato klasser med en håndfuld funktioner i Thymeleaf 3.0.

2. Maven-afhængigheder

Lad os først se den konfiguration, der er nødvendig for at integrere Thymeleaf med Spring i vores pom.xml:

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

De nyeste versioner af thymeleaf og thymeleaf-spring5 kan findes på Maven Central. Bemærk, at for et Spring 4-projekt, thymeleaf-spring4 biblioteket skal bruges i stedet for thymeleaf-spring5.

Desuden for at arbejde med nye Java 8 Dato klasser, vil vi tilføje følgende afhængighed til vores pom.xml:

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

Det thymeleaf ekstra er et valgfrit modul, der understøttes fuldt ud af det officielle Thymeleaf-team, der blev oprettet for kompatibilitet med Java 8 Time API. Det tilføjer et #temporale modsætter sig Sammenhæng som hjælpeprocessor under hjælp af ekspressionsevalueringer. Dette betyder, at det kan bruges til at evaluere udtryk i Object-Graph Navigation Language (OGNL) og Spring Expression Language (SpringEL).

3. Gammelt og nyt: java.util og java.tid

Det Tid pakke er en ny dato, tid og kalender API til Java SE platformen. Den største forskel mellem gammel arv Dato og er, at den nye API skelner mellem maskinens og menneskelige synspunkter på en tidslinje. Maskinvisningen afslører en sekvens af integrerede værdier i forhold til epoke, hvorimod udsigten afslører et sæt felter (f.eks. år eller dag).

At arbejde med det nye Tid pakke, skal vi konfigurere vores skabelonmotor til at bruge den nye Java8TimeDialect:

private ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine engine = new SpringTemplateEngine (); engine.addDialect (ny Java8TimeDialect ()); engine.setTemplateResolver (templateResolver); returmotor; }

Dette tilføjer #temporale objekt svarende til dem i standarddialekten, så formatering og oprettelse af Temporal objekter fra Thymeleaf-skabeloner.

For at teste behandlingen af ​​nye og gamle klasser opretter vi følgende variabler og tilføjer dem som modelobjekter til vores controller-klasse:

model.addAttribute ("standardDate", ny dato ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("tidsstempel", Instant.now ());

Nu er vi klar til brug Udtryk og TemporalerHjælpeprogrammer leveret af Thymeleaf.

3.1. Formatér datoer

Den første funktion, som vi ønsker at dække, er formateringen af ​​en Dato objekt (som føjes til Spring-modelparametrene). Vi besluttede at bruge ISO8601 format:

Ligegyldigt hvordan vores Dato blev indstillet på bagsiden, vises den i overensstemmelse med den valgte standard. Det standarddato behandles af #datoer hjælpeprogram. Den nye LocalDateTime,LocalDate og Øjeblikkelig klasser behandles af #temporale hjælpeprogram. Dette er det endelige resultat, vi ser i browseren:

Dette er det endelige resultat, vi ser i browseren:

Desuden, hvis vi vil indstille formatet manuelt, kan vi gøre det ved at bruge:

Som vi kan observere, kan vi ikke behandle Øjeblikkelig klasse med #temporals.format (…) - det vil resultere i Ikke-understøttetTemporalTypeException. Desuden formatering af LocalDate er kun muligt, hvis vi kun specificerer de bestemte datofelter og springer tidsfelterne over.

Det endelige resultat:

3.2. Få specifikke datofelter

For at opnå de specifikke felter i java.util.Date klasse, skal vi bruge følgende værktøjsobjekter:

$ {# 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)}

Til det nye java.tid pakke, vi skal holde os til #temporale forsyningsselskaber:

$ {# 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)}

Lad os se på et par eksempler. Lad os først vise dagens dag i ugen:

Lad os derefter vise navnet på ugedagen:

Og endelig, lad os vise dagens aktuelle sekund:

Bemærk, at du for at arbejde med tidsdele skal bruge LocalDateTime, som LocalDate vil kaste en fejl.

4. Konklusion

I denne hurtige vejledning diskuterede vi Java Dato behandlingsfunktioner implementeret i Thymeleaf framework, version 3.0.

Den fulde implementering af denne vejledning kan findes i GitHub-projektet - dette er et Maven-baseret projekt, der er let at importere og køre.

Hvordan tester man? Vores forslag er først at lege med koden i en browser og derefter kontrollere vores eksisterende JUnit-test også.

Bemærk, at vores eksempler ikke dækker alle tilgængelige muligheder i Thymeleaf. Hvis du vil lære om alle typer hjælpeprogrammer, så kig på vores artikel, der dækker Spring og Thymeleaf Expressions.


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