Guida ai baffi con Spring Boot

1. Panoramica

In questo articolo, ci concentreremo sull'utilizzo dei modelli Moustache per la produzione di contenuto HTML nelle applicazioni Spring Boot.

È un motore di modelli senza logica per la creazione di contenuti dinamici , popolare per la sua semplicità.

Se vuoi scoprire le basi, controlla la nostra introduzione all'articolo Moustache.

2. Dipendenza da Maven

Per essere in grado di utilizzare Moustache insieme a Spring Boot, dobbiamo aggiungere lo starter Spring Boot dedicato al nostro pom.xml:

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

Inoltre, abbiamo bisogno della dipendenza spring-boot-starter-web.

3. Creazione di modelli

Mostriamo un esempio e creiamo una semplice applicazione MVC usando Spring-Boot che servirà articoli su una pagina web.

Scriviamo il primo template per il contenuto dell'articolo:

 {{#articles}} 

{{publishDate}}

{{author}}

{{body}}

{{/articles}}

Salveremo questo file HTML, diciamo articolo.html , e lo faremo riferimento nel nostro index.html:

 {{>layout/article}} 

Qui, il layout è una sottodirectory e l' articolo è il nome del file del modello.

Nota che l'estensione del file modello di baffi predefinita è adesso. baffi . Possiamo sovrascrivere questa configurazione con una proprietà:

spring.mustache.suffix:.html

4. Controller

Ora scriviamo il controller per la pubblicazione di articoli:

@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); }

Il controller restituisce un elenco di articoli da visualizzare nella pagina. Nel modello dell'articolo, i tag articoli che iniziano con # e finiscono con /, si occupano dell'elenco.

Questo itererà sul modello passato e renderà ogni elemento separatamente proprio come in una tabella HTML:

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

Il metodo generateArticle () crea un'istanza di Article con alcuni dati casuali.

Notare che le chiavi nel modello di articolo, restituite dal controller, dovrebbero essere le stesse dei tag del modello di articolo .

Ora testiamo la nostra applicazione:

@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")); }

Possiamo anche testare l'applicazione distribuendola con:

mvn spring-boot:run

Una volta distribuito, possiamo premere localhost: 8080 / articolo e visualizzeremo i nostri articoli elencati:

5. Gestione dei valori predefiniti

In un ambiente Moustache, se non forniamo un valore per un segnaposto, MoustacheException verrà lanciata con un messaggio "Nessun metodo o campo con nome" nome-variabile ... ".

Per evitare tali errori è meglio fornire un valore globale predefinito a tutti i segnaposto:

@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. Moustache With Spring MVC

Ora, parliamo di come eseguire l'integrazione con Spring MVC se decidiamo di non utilizzare Spring Boot. Innanzitutto, aggiungiamo la dipendenza:

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

L'ultima potrebbe essere trovata qui.

Successivamente, dobbiamo configurare MoustacheViewResolver invece di InternalResourceViewResolver di Spring :

@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; } 

Abbiamo solo bisogno di configurare il suffisso, dove sono memorizzati i nostri modelli, prefisso l'estensione dei nostri modelli e templateLoader, che sarà responsabile del caricamento dei modelli.

7. Conclusione

In questo breve tutorial, abbiamo esaminato l'utilizzo dei modelli Moustache con Spring Boot, il rendering di una raccolta di elementi nell'interfaccia utente e anche la fornitura di valori predefiniti alle variabili per evitare errori.

Infine, abbiamo discusso di come integrarlo con Spring, utilizzando MoustacheViewResolver.

Come sempre il codice sorgente è disponibile su GitHub.