Guia de bigode com bota de mola
1. Visão geral
Neste artigo, vamos nos concentrar no uso de modelos Mustache para produzir conteúdo HTML em aplicativos Spring Boot.
É umlogic-less template engine for creating dynamic content, que é popular devido à sua simplicidade.
Se você quiser descobrir o básico, verifique nosso artigointroduction to Mustache.
2. Dependência do Maven
Para poder usar o Mustache junto com o Spring Boot, precisamos adicionar odedicated Spring Boot starter ao nossopom.xml:
org.springframework.boot
spring-boot-starter-mustache
org.springframework.boot
spring-boot-starter-web
Além disso, precisamos da dependênciaspring-boot-starter-web.
3. Criando modelos
Vamos mostrar um exemplo e criar um aplicativo MVC simples usando Spring-Boot que servirá artigos em uma página da web.
Vamos escrever o primeiro modelo para o conteúdo do artigo:
{{#articles}}
{{title}}
{{publishDate}}
{{author}}
{{body}}
{{/articles}}
Vamos salvar este arquivo HTML, digamosarticle.html, ae consultá-lo em nossoindex.html:
{{>layout/article}}
Aqui,layout é um subdiretório earticle é o nome do arquivo de modelo.
Observe que a extensão do arquivo de modelo de bigode padrão agora é.mustache. Podemos substituir essa configuração por uma propriedade:
spring.mustache.suffix:.html
4. Controlador
Agora vamos escrever o controlador para veicular artigos:
@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);
}
O controlador retorna uma lista de artigos a serem renderizados na página. No modelo de artigo, a tagarticles começando com # e terminando em /, cuida da lista.
Isso irá percorrer o modelo passado e renderizar cada elemento separadamente, como em uma tabela HTML:
{{#articles}}...{{/articles}}
O métodogenerateArticle() cria uma instânciaArticle com alguns dados aleatórios.
Observe que as chaves no Modelo de Artigo, retornadas pelo controlador, devem ser as mesmas das tags de modeloarticle.
Agora, vamos testar nosso aplicativo:
@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"));
}
Também podemos testar o aplicativo implantando-o com:
mvn spring-boot:run
Uma vez implantado, podemos atingirlocalhost:8080/article, e obteremos nossos artigos listados:
5. Tratamento de valores padrão
Em um ambiente Mustache, se não fornecermos um valor para um espaço reservado, oMustacheException será lançado com uma mensagem“No method or field with name ”variable-name …”.
Para evitar tais erros, é melhor fornecer um valor global padrão para todos os marcadores de posição:
@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. Bigode com Spring MVC
Agora, vamos discutir como integrar com Spring MVC se decidirmos não usar Spring Boot. Primeiro, vamos adicionar a dependência:
com.github.sps.mustache
mustache-spring-view
1.4
O mais recente pode ser encontradohere.
Em seguida, precisamos configurarMustacheViewResolver em vez deInternalResourceViewResolver de 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;
}
Precisamos apenas configurar osuffix, onde nossos modelos são armazenados,prefix a extensão de nossos modelos e otemplateLoader, que será responsável por carregar os modelos.
7. Conclusão
Neste tutorial rápido, analisamos o uso de modelos Bigode com Spring Boot, renderizando uma coleção de elementos na interface do usuário e também fornecendo valores padrão para variáveis para evitar erros.
Finalmente, discutimos como integrá-lo com Spring, usandoMustacheViewResolver.
Como sempre, o código-fonte está disponívelover on GitHub.