Gids voor Moustache met Spring Boot

1. Overzicht

In dit artikel zullen we ons concentreren op het gebruik van Moustache-sjablonen voor het produceren van HTML-inhoud in Spring Boot-toepassingen.

Het is een logische sjabloon-engine voor het creëren van dynamische inhoud, wat populair is vanwege zijn eenvoud.

Als je de basis wilt ontdekken, bekijk dan ons inleiding tot Moustache-artikel.

2. Maven Afhankelijkheid

Om Moustache samen met Spring Boot te kunnen gebruiken, moeten we de speciale Spring Boot-starter toevoegen aan onze pom.xml:

 org.springframework.boot spring-boot-starter-moustache org.springframework.boot spring-boot-starter-web 

Daarnaast hebben we de spring-boot-starter-web-afhankelijkheid nodig.

3. Sjablonen maken

Laten we een voorbeeld laten zien en een eenvoudige MVC-applicatie maken met Spring-Boot die artikelen op een webpagina zal presenteren.

Laten we de eerste sjabloon voor de inhoud van het artikel schrijven:

 {{#Lidwoord}} 

{{publiceer datum}}

{{schrijver}}

{{lichaam}}

{{/Lidwoord}}

We slaan dit HTML-bestand bijvoorbeeld op article.html, eennd verwijzen in onze index.html:

 {{> layout / artikel}} 

Hier de indeling is een submap, en de artikel is de bestandsnaam voor het sjabloonbestand.

Merk op dat de standaard bestandsextensie van snor-sjabloon nu is.snor. We kunnen deze configuratie overschrijven met een eigenschap:

spring.mustache.suffix: .html

4. Verantwoordelijke

Laten we nu de controller schrijven voor het serveren van artikelen:

@GetMapping ("/ article") public ModelAndView displayArticle (Kaartmodel) {List Articles = IntStream.range (0, 10) .mapToObj (i -> GenerArticle ("Article Title" + i)) .collect (Collectors.toList ( )); model.put ("artikelen", artikelen); retourneer nieuw ModelAndView ("index", model); }

De controller retourneert een lijst met artikelen die op de pagina moeten worden weergegeven. In het artikelsjabloon wordt de tag Lidwoord beginnend met # en eindigend op /, zorgt voor de lijst.

Dit zal het doorgegeven model herhalen en elk element afzonderlijk weergeven, net als in een HTML-tabel:

 {{#articles}} ... {{/ artikelen}} 

De genererenArticle () methode maakt een Artikel instantie met enkele willekeurige gegevens.

Merk op dat de sleutels in het artikelmodel, geretourneerd door de controller, dezelfde moeten zijn als die van het artikel sjabloon tags.

Laten we nu onze applicatie testen:

@Test openbare leegte gegevenIndexPage_whenContainsArticle_thenTrue () {ResponseEntity entiteit = this.restTemplate.getForEntity ("/ article", String.class); assertTrue (entity.getStatusCode () .equals (HttpStatus.OK)); assertTrue (entity.getBody () .contains ("Artikel Titel 0")); }

We kunnen de applicatie ook testen door deze te implementeren met:

mvn spring-boot: run

Eenmaal ingezet, kunnen we toeslaan localhost: 8080 / artikel, en we krijgen onze artikelen op een rijtje:

5. Omgaan met standaardwaarden

Als we in een Moustache-omgeving geen waarde voor een tijdelijke aanduiding opgeven, wordt de MoustacheException zal worden gegooid met een bericht "Geen methode of veld met naam" variabelenaam… ".

Om dergelijke fouten te vermijden, is het beter om een ​​globale standaardwaarde aan alle tijdelijke aanduidingen te geven:

@Bean openbare Moustache.Compiler snorCompiler (Moustache.TemplateLoader templateLoader, Omgevingsomgeving) {MoustacheEnvironmentCollector collector = nieuwe MoustacheEnvironmentCollector (); collector.setEnvironment (omgeving); retourneer Moustache.compiler () .defaultValue ("Een standaardwaarde") .withLoader (templateLoader) .withCollector (collector); }

6. Snor met veer MVC

Laten we nu bespreken hoe we kunnen integreren met Spring MVC als we besluiten om Spring Boot niet te gebruiken. Laten we eerst de afhankelijkheid toevoegen:

 com.github.sps.mustache snor-spring-view 1.4 

Het laatste is hier te vinden.

Vervolgens moeten we configureren MoustacheViewResolver in plaats van de lente InternalResourceViewResolver:

@Bean openbare ViewResolver getViewResolver (ResourceLoader resourceLoader) {MoustacheViewResolver mustacheViewResolver = nieuwe MoustacheViewResolver (); moustacheViewResolver.setPrefix ("/ WEB-INF / views /"); moustacheViewResolver.setSuffix (".. moustache"); moustacheViewResolver.setCache (false); MoustacheTemplateLoader moustacheTemplateLoader = nieuwe MoustacheTemplateLoader (); moustacheTemplateLoader.setResourceLoader (resourceLoader); moustacheViewResolver.setTemplateLoader (moustacheTemplateLoader); retourneer moustacheViewResolver; } 

We hoeven alleen het achtervoegsel, waar onze sjablonen worden opgeslagen, voorvoegsel de extensie van onze sjablonen, en de templateLoader, die verantwoordelijk is voor het laden van sjablonen.

7. Conclusie

In deze korte tutorial hebben we gekeken naar het gebruik van Moustache-sjablonen met Spring Boot, het renderen van een verzameling elementen in de gebruikersinterface en het leveren van standaardwaarden voor variabelen om fouten te voorkomen.

Ten slotte hebben we besproken hoe we het kunnen integreren met Spring, met behulp van MoustacheViewResolver.

Zoals altijd is de broncode beschikbaar op GitHub.