Рубрики
Без рубрики

Руководство по усам с пружинным ботинком

Узнайте, как интегрировать шаблоны усов с Spring Boot.

Автор оригинала: baeldung.

1. Обзор

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

Это лишенный логики шаблонизатор для создания динамического контента , который популярен благодаря своей простоте.

Если вы хотите узнать основы, ознакомьтесь с нашей статьей “Введение в усы”.

2. Зависимость от Maven

Чтобы иметь возможность использовать усы вместе с Spring Boot, нам нужно добавить специальный стартер Spring Boot в ваш 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}}

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

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

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

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

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

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

Метод generate Article() создает экземпляр 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/статья, и мы получим список наших статей:

5. Обработка Значений По Умолчанию

В среде с усами, если мы не предоставим значение для заполнителя, исключение MustacheException будет выдано с сообщением “Нет метода или поля с именем “имя переменной …”.

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

@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. Усы С Пружинным MVC

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


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

Последнюю версию можно найти здесь .

Далее нам нужно настроить MustacheViewResolver вместо Spring InternalResourceViewResolver

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

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

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

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

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

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