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 .