Руководство по усам с весенней загрузкой
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,, и мы получим список наших статей:
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.