Pebble模板继承失败而没有错误

时间:2018-07-02 20:06:27

标签: java spring spring-boot pebble

我在Spring Boot 2中使用了Pebble模板引擎,在我开始使用继承之前,一切工作正常。浏览器显示一个空白页面,根本不返回任何内容。不幸的是,服务器和Catalina(我正在使用Tomcat 8.5)日志没有显示错误。

在pom中,我具有以下依赖性:

  • Spring Boot 2.0.3(作为父级)
  • pebble-spring-boot-2-starter(尝试2.6.2和3.0.0.BETA01)
  • spring-boot-starter-data-jpa
  • spring-boot-starter-web
  • spring-boot-starter-security

我有以下application.properties

  • pebble.suffix = .html.peb
  • pebble.cache = false(也尝试过)

我的父模板(resources / templates / base.html.peb)

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head></head>
<body>Template test</body>
</html>

我的子模板(resources / templates / child.html.peb)

{% extends "base.html.peb" %}

当我删除继承时,Pebble正常工作,并且包含并显示了模型,因此Pebble确实可以工作。

1 个答案:

答案 0 :(得分:1)

Pebble Spring Boot Starter通过连接前缀,模板名称和后缀来解析模板路径:

公共类PebbleTemplateAvailabilityProvider实现TemplateAvailabilityProvider {

@Override
public boolean isTemplateAvailable(String view, Environment environment, ClassLoader classLoader,
        ResourceLoader resourceLoader) {
    if (ClassUtils.isPresent("com.mitchellbosecke.pebble.PebbleEngine", classLoader)) {
        String prefix = environment.getProperty("pebble.prefix", PebbleProperties.DEFAULT_PREFIX);
        String suffix = environment.getProperty("pebble.suffix", PebbleProperties.DEFAULT_SUFFIX);
        return resourceLoader.getResource(ResourceLoader.CLASSPATH_URL_PREFIX + prefix + view + suffix).exists();
    } else {
        return false;
    }
}

}

如果模板在'extends'指令中指定后缀,则后缀将被追加一次,而找不到模板,例如:

resources / templates / base.html.peb.html.peb

要解决此问题,必须在'extends'指令中指定卵石模板名称而不加前缀:

{% extends "base" %}

对我来说,这是一个错误。 Pebble Spring Boot Starter应该能够检测带有或不带有后缀的基本模板。