Guia de bigode com bota de mola

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:

image

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.