Руководство по усам с Spring Boot

Руководство по усам с весенней загрузкой

1. обзор

В этой статье мы сосредоточимся на использовании шаблонов Mustache для создания HTML-контента в приложениях Spring Boot.

Этоlogic-less template engine for creating dynamic content, популярный благодаря своей простоте.

Если вы хотите узнать об основах, ознакомьтесь с нашей статьейintroduction to Mustache.

2. Maven Dependency

Чтобы иметь возможность использовать Mustache вместе с Spring Boot, нам нужно добавитьdedicated Spring Boot starter к нашемуpom.xml:


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


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

Кроме того, нам нужна зависимостьspring-boot-starter-web.

3. Создание шаблонов

Давайте покажем пример и создадим простое приложение MVC с использованием Spring-Boot, которое будет обслуживать статьи на веб-странице.

Напишем первый шаблон для содержания статьи:

{{#articles}}

{{title}}

{{publishDate}}

{{author}}

{{body}}

{{/articles}}

Мы сохраним этот HTML-файл, скажемarticle.html, a, и направим его в нашindex.html:

{{>layout/article}}

Здесьlayout - это подкаталог, аarticle - это имя файла для файла шаблона.

Обратите внимание, что расширение файла шаблона усов по умолчанию теперь.mustache. Мы можем переопределить эту конфигурацию с помощью свойства:

spring.mustache.suffix:.html

4. контроллер

Теперь напишем контроллер для обслуживания статей:

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

Контроллер возвращает список статей, которые будут отображаться на странице. В шаблоне статьи тегarticles, начинающийся с # и заканчивающийся на /, отвечает за список.

Это перебирает переданную модель и визуализирует каждый элемент отдельно, как в таблице HTML:

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

МетодgenerateArticle() создает экземплярArticle с некоторыми случайными данными.

Обратите внимание, что ключи в модели статьи, возвращаемые контроллером, должны быть такими же, как ключи тегов шаблонаarticle.

Теперь давайте протестируем наше приложение:

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

Мы также можем протестировать приложение, развернув его с помощью:

mvn spring-boot:run

После развертывания мы можем нажатьlocalhost:8080/article,, и мы получим список наших статей:

image

5. Обработка значений по умолчанию

В среде Mustache, если мы не предоставим значение для заполнителя,MustacheException будет выдан с сообщением“No method or field with name ”variable-name …”.

Чтобы избежать таких ошибок, лучше предоставить всем заполнителям глобальное значение по умолчанию:

@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. Усы с Spring MVC

Теперь давайте обсудим, как интегрироваться со Spring MVC, если мы решим не использовать Spring Boot. Во-первых, давайте добавим зависимость:


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

Последний может быть найденhere.

Затем нам нужно настроитьMustacheViewResolver вместоInternalResourceViewResolver 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;
}

Нам просто нужно настроитьsuffix,, где хранятся наши шаблоны,prefix как расширение наших шаблонов иtemplateLoader,, которые будут отвечать за загрузку шаблонов.

7. Заключение

В этом кратком руководстве мы рассмотрели использование шаблонов Mustache с Spring Boot, рендеринг коллекции элементов в пользовательском интерфейсе, а также предоставление значений по умолчанию для переменных, чтобы избежать ошибок.

Наконец, мы обсудили, как интегрировать его со Spring, используяMustacheViewResolver.

Как всегда доступен исходный кодover on GitHub.