【问题标题】:Spring FreeMarkerConfiguration Template Loader Path overwritten by ConfigurationSpring FreeMarkerConfiguration 模板加载器路径被配置覆盖
【发布时间】:2014-08-15 08:35:43
【问题描述】:

我有一个使用 Spring 4 运行的基于 Java 的 Web 应用程序。我将 FreeMarker 用于我的 Web 模板。我的 WebConfig 类使用 FreeMarkerConfigurer 对象来设置我的模板加载器路径和其他一些设置:

@Bean
public FreeMarkerConfigurer freemarkerConfig() throws IOException {
    FreeMarkerConfigurer fmc = new FreeMarkerConfigurer();
    fmc.setTemplateLoaderPath("/WEB-INF/templates");
    fmc.setDefaultEncoding("UTF-8");
    Properties settings = new Properties();
    settings.setProperty("date_format", "dd MMM yyyy");
    fmc.setFreemarkerSettings(settings);
    return fmc;
}

这工作正常:视图正确解析,包括可以从 jar 加载的任何 <#import 'spring.ftl' as spring> 指令。

现在我想更多地自定义我的应用程序,例如设置自定义模板异常处理程序。我创建了一个 FreeMarker Configuration 对象并将其添加到 FreeMarkerConfigurer:

Configuration cfg = new Configuration();
cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());
fmc.setConfiguration(cfg);

但这阻止了我的视图解析 - 它似乎覆盖了 FreeMarkerConfigurer 对象中的 TemplateLoaderPath,我必须在 Configuration 实例中显式设置路径,而不是让我的模板被项目定位:

cfg.setDirectoryForTemplateLoading(new File("C:/myProject/WEB-INF/templates"));

此外,spring.ftl 不再从 jar 加载,我必须在模板目录中放置一个副本才能加载它。

为什么将Configuration 添加到FreeMarkerConfigurer 会覆盖我的模板加载器路径?是我的设置不正确还是Configuration 具有更高的优先级?

【问题讨论】:

    标签: spring spring-mvc freemarker


    【解决方案1】:

    FreeMarkerConfigurer 只是一个帮助构建freemarker.template.Configuration 并使用其方法getConfiguration() 公开它的工厂。

    如果您想进一步配置配置,请先从您的配置器中提取它,因为 FreeMarker 只会使用一个 Configuration

    【讨论】:

      猜你喜欢
      • 2015-10-06
      • 2021-01-26
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 2012-08-21
      • 1970-01-01
      相关资源
      最近更新 更多