Anleitung zum Schnurrbart mit Spring Boot

Anleitung zum Schnurrbart mit Spring Boot

1. Überblick

In diesem Artikel konzentrieren wir uns auf die Verwendung von Moustache-Vorlagen zum Erstellen von HTML-Inhalten in Spring Boot-Anwendungen.

Es ist einlogic-less template engine for creating dynamic content, was aufgrund seiner Einfachheit beliebt ist.

Wenn Sie die Grundlagen entdecken möchten, lesen Sie unseren Artikel zuintroduction to Mustache.

2. Maven-Abhängigkeit

Um Moustache zusammen mit Spring Boot verwenden zu können, müssen wir diededicated Spring Boot starter zu unserenpom.xml: hinzufügen


    org.springframework.boot
    spring-boot-starter-mustache


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

Außerdem benötigen wir die Abhängigkeit vonspring-boot-starter-web.

3. Vorlagen erstellen

Lassen Sie uns ein Beispiel zeigen und mit Spring-Boot eine einfache MVC-Anwendung erstellen, die Artikel auf einer Webseite bereitstellt.

Schreiben wir die erste Vorlage für den Artikelinhalt:

{{#articles}}

{{title}}

{{publishDate}}

{{author}}

{{body}}

{{/articles}}

Wir speichern diese HTML-Datei, sagen wirarticle.html, aund verweisen sie in unserenindex.html:

{{>layout/article}}

Hier istlayout ein Unterverzeichnis undarticle ist der Dateiname für die Vorlagendatei.

Beachten Sie, dass die Standard-Dateierweiterung für Schnurrbartvorlagen jetzt.mustache ist. Wir können diese Konfiguration mit einer Eigenschaft überschreiben:

spring.mustache.suffix:.html

4. Regler

Schreiben wir nun den Controller zum Servieren von Artikeln:

@GetMapping("/article")
public ModelAndView displayArticle(Map model) {

    List
articles = IntStream.range(0, 10) .mapToObj(i -> generateArticle("Article Title " + i)) .collect(Collectors.toList()); model.put("articles", articles); return new ModelAndView("index", model); }

Der Controller gibt eine Liste der Artikel zurück, die auf der Seite gerendert werden sollen. In der Artikelvorlage kümmert sich das Tagarticles, das mit # beginnt und mit / endet, um die Liste.

Dadurch wird das übergebene Modell durchlaufen und jedes Element wie in einer HTML-Tabelle separat gerendert:

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

Die MethodegenerateArticle()erstellt eine Instanz vonArticlemit einigen zufälligen Daten.

Beachten Sie, dass die vom Controller zurückgegebenen Schlüssel im Artikelmodell mit denen derarticle-Vorlagen-Tags übereinstimmen sollten.

Testen wir nun unsere Anwendung:

@Test
public void givenIndexPage_whenContainsArticle_thenTrue() {

    ResponseEntity entity
      = this.restTemplate.getForEntity("/article", String.class);

    assertTrue(entity.getStatusCode()
      .equals(HttpStatus.OK));
    assertTrue(entity.getBody()
      .contains("Article Title 0"));
}

Wir können die Anwendung auch testen, indem wir sie bereitstellen mit:

mvn spring-boot:run

Nach der Bereitstellung können wirlocalhost:8080/article, erreichen und unsere Artikel werden aufgelistet:

image

5. Umgang mit Standardwerten

Wenn in einer Moustache-Umgebung kein Wert für einen Platzhalter angegeben wird, werdenMustacheException mit der Nachricht“No method or field with name ”variable-name …”. ausgelöst

Um solche Fehler zu vermeiden, ist es besser, allen Platzhaltern einen globalen Standardwert bereitzustellen:

@Bean
public Mustache.Compiler mustacheCompiler(
  Mustache.TemplateLoader templateLoader,
  Environment environment) {

    MustacheEnvironmentCollector collector
      = new MustacheEnvironmentCollector();
    collector.setEnvironment(environment);

    return Mustache.compiler()
      .defaultValue("Some Default Value")
      .withLoader(templateLoader)
      .withCollector(collector);
}

6. Schnurrbart mit Spring MVC

Lassen Sie uns nun diskutieren, wie Sie Spring MVC integrieren können, wenn Sie Spring Boot nicht verwenden. Fügen wir zunächst die Abhängigkeit hinzu:


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

Die neuesten konntenhere gefunden werden.

Als nächstes müssen wirMustacheViewResolver anstelle vonInternalResourceViewResolver von Spring konfigurieren:

@Bean
public ViewResolver getViewResolver(ResourceLoader resourceLoader) {
    MustacheViewResolver mustacheViewResolver
      = new MustacheViewResolver();
    mustacheViewResolver.setPrefix("/WEB-INF/views/");
    mustacheViewResolver.setSuffix("..mustache");
    mustacheViewResolver.setCache(false);
    MustacheTemplateLoader mustacheTemplateLoader
      = new MustacheTemplateLoader();
    mustacheTemplateLoader.setResourceLoader(resourceLoader);
    mustacheViewResolver.setTemplateLoader(mustacheTemplateLoader);
    return mustacheViewResolver;
}

Wir müssen nur diesuffix, konfigurieren, in denen unsere Vorlagen gespeichert sind,prefix die Erweiterung unserer Vorlagen und dietemplateLoader,, die für das Laden von Vorlagen verantwortlich sind.

7. Fazit

In diesem kurzen Lernprogramm haben wir uns mit der Verwendung von Mustache-Vorlagen mit Spring Boot befasst, indem wir eine Sammlung von Elementen in der Benutzeroberfläche gerendert und Variablen zur Vermeidung von Fehlern Standardwerte bereitgestellt haben.

Schließlich haben wir diskutiert, wie man es mitMustacheViewResolver. in Spring integriert

Wie immer ist der Quellcodeover on GitHub verfügbar.