Werken met datums in Thymeleaf

1. Inleiding

Thymeleaf is een Java-sjabloonengine die is ontworpen om rechtstreeks met Spring te werken. Bekijk dit artikel voor een inleiding tot Thymeleaf en Spring.

Naast deze basisfuncties biedt Thymeleaf ons een set hulpprogramma-objecten die ons zullen helpen bij het uitvoeren van veelvoorkomende taken in onze applicatie.

In dit artikel bespreken we de verwerking en opmaak van de nieuwe en oude Java Datum lessen met een handvol functies van Thymeleaf 3.0.

2. Maven afhankelijkheden

Laten we eerst eens kijken welke configuratie nodig is om Thymeleaf met Spring te integreren in ons pom.xml:

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

De nieuwste versies van thymeleaf en thymeleaf-spring5 is te vinden op Maven Central. Merk op dat voor een Spring 4-project de thymeleaf-spring4 bibliotheek moet worden gebruikt in plaats van thymeleaf-spring5.

Bovendien, om te werken met nieuwe Java 8 Datum klassen, zullen we de volgende afhankelijkheid toevoegen aan onze pom.xml:

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

De thymeleaf extra's is een optionele module, volledig ondersteund door het officiële Thymeleaf-team, die is gemaakt voor compatibiliteit met de Java 8 Time API. Het voegt een # toetijdgenoten bezwaar maken tegen de Context als een hulpprogramma-objectprocessor tijdens evaluaties van uitdrukkingen. Dit betekent dat het kan worden gebruikt om uitdrukkingen in Object-Graph Navigation Language (OGNL) en Spring Expression Language (SpringEL) te evalueren.

3. Oud en nieuw: java.util en java.time

De Tijd pakket is een nieuwe datum-, tijd- en kalender-API voor het Java SE-platform. Het belangrijkste verschil tussen oude erfenis Datum en is dat de nieuwe API onderscheid maakt tussen machine- en menselijke weergaven van een tijdlijn. De machineweergave toont een reeks integrale waarden ten opzichte van de tijdperk, terwijl weergave een reeks velden laat zien (bijvoorbeeld jaar of dag).

Om met het nieuwe te werken Tijd pakket, moeten we onze sjabloonengine configureren om het nieuwe Java8TimeDialect:

private ISpringTemplateEngine templateEngine (ITemplateResolver templateResolver) {SpringTemplateEngine engine = nieuwe SpringTemplateEngine (); engine.addDialect (nieuwe Java8TimeDialect ()); engine.setTemplateResolver (templateResolver); terugkeer motor; }

Dit zal de # toevoegentijdgenoten object vergelijkbaar met die in het standaarddialect, waardoor het mogelijk is om Tijdelijk objecten van Thymeleaf-sjablonen.

Om de verwerking van nieuwe en oude klassen te testen, zullen we de volgende variabelen maken en deze als modelobjecten aan onze controllerklasse toevoegen:

model.addAttribute ("standardDate", new Date ()); model.addAttribute ("localDateTime", LocalDateTime.now ()); model.addAttribute ("localDate", LocalDate.now ()); model.addAttribute ("timestamp", Instant.now ());

Nu zijn we klaar voor gebruik Uitdrukking en Tijdelijke personenHulpprogramma-objecten geleverd door Thymeleaf.

3.1. Formatteer datums

De eerste functie die we willen behandelen, is de opmaak van een Datum object (dat wordt toegevoegd aan de Spring-modelparameters). We hebben besloten om de ISO8601 formaat:

Maakt niet uit hoe onze Datum is ingesteld op de achterkant, wordt het overeenkomstig de geselecteerde standaard weergegeven. De standardDate wordt verwerkt door de #datums nut. De nieuwe LocalDateTime,LocalDate en Onmiddellijk klassen worden verwerkt door de #tijdgenoten nut. Dit is het uiteindelijke resultaat dat we in de browser zullen zien:

Dit is het uiteindelijke resultaat dat we in de browser zullen zien:

Als we het formaat bovendien handmatig willen instellen, kunnen we dit doen met behulp van:

Zoals we kunnen zien, kunnen we de Onmiddellijk les met #temporals.format (...) - het zal resulteren in Niet-ondersteundeTemporalTypeException. Bovendien formatteert u het LocalDate is alleen mogelijk als we alleen de specifieke datumvelden specificeren en de tijdvelden overslaan.

Het uiteindelijke resultaat:

3.2. Verkrijg specifieke datumvelden

Om de specifieke velden van het java.util.Date class, moeten we de volgende utility-objecten gebruiken:

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

Voor het nieuwe java.time pakket, we moeten vasthouden aan #tijdgenoten Gereedschap:

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

Laten we een paar voorbeelden bekijken. Laten we eerst de dag van de week van vandaag laten zien:

Laten we vervolgens de naam van de weekdag weergeven:

En tot slot, laten we de huidige seconde van de dag laten zien:

Houd er rekening mee dat u, om met tijdsdelen te kunnen werken, gebruik moet maken van LocalDateTime, net zo LocalDate zal een fout veroorzaken.

4. Conclusie

In deze korte tutorial hebben we Java besproken Datum verwerkingsfuncties geïmplementeerd in het Thymeleaf-framework, versie 3.0.

De volledige implementatie van deze tutorial is te vinden in het GitHub-project - dit is een op Maven gebaseerd project dat gemakkelijk te importeren en uit te voeren is.

Hoe te testen? Onze suggestie is om eerst met de code in een browser te spelen en daarna ook onze bestaande JUnit-tests te bekijken.

Houd er rekening mee dat onze voorbeelden niet alle beschikbare opties in Thymeleaf dekken. Als je meer wilt weten over alle soorten hulpprogramma's, bekijk dan ons artikel over lente- en thymeleaf-expressies.