15.1 模板解析器

我们为百里香虚拟杂货店选择了一个叫做ServletContextTemplateResolverITemplateResolver实现。它允许我们像来自Servlet上下文的资源一样获取模版。

除了让我们能够通过实现ITemplateResolver创建我们自己的模版解析器,Thymeleaf包含了四种立即可用的实现:

  • org.thymeleaf.templateresolver.ClassLoaderTemplateResolver,当作类加载器资源解析模版,就像:

    return Thread.currentThread().getContextClassLoader().getResourceAsStream(template);
  • org.thymeleaf.templateresolver.FileTemplateResolver,当作来自文件系统的文件解析模版,就像:

    return new FileInputStream(new File(template));
  • org.thymeleaf.templateresolver.UrlTemplateResolver,当作URL(甚至非本地的URL)解析模版,就像:

    return (new URL(template)).openStream();
  • org.thymeleaf.templateresolver.StringTemplateResolver,当作String (以template指定,或者是模版名)解析模版:

    return new StringReader(templateName);

ITemplateResolver的所有预绑定的实现允许相同的一组配置参数。它包括:

  • 前缀和后缀(和已经看到的一样):

    templateResolver.setPrefix("/WEB-INF/templates/");
    templateResolver.setSuffix(".html");
  • 模版别名。他允许使用不直接等于文件名的模版名字。如果前缀/后缀和别名同时存在,别名会在前缀/后缀之前被应用:

    templateResolver.addTemplateAlias("adminHome","profiles/admin/home");
    templateResolver.setTemplateAliases(aliasesMap);
  • 读取模板时的编码:

    templateResolver.setEncoding("UTF-8");
  • 使用的模板模式:

    // Default is HTML
    templateResolver.setTemplateMode("XML");
  • 模板缓存的默认模式,以及定义指定模板是否可缓存的模式:

    // Default is true
    templateResolver.setCacheable(false);
    templateResolver.getCacheablePatternSpec().addPattern("/users/*");
  • 由这个模板解析器产生的模板缓存入口的存活时间(毫秒计)。如果没有设置,从缓存里移除一个入口的唯一方式将会是超过最大缓存量(最老的入口会被移除)。

    // Default is no TTL (only cache size exceeded would remove entries)
    templateResolver.setCacheTTLMs(60000L);
Thymeleaf + Spring整合包提供了一个`SpringResourceTemplateResolver`实现。它使用所有的Spring基础设施来访问和读取应用里的资源,是Spring应用里推荐的实现。

Last updated