4

我目前正在尝试让 Freemarker 使用 Spring 与我的应用程序一起工作。无论我尝试什么,我总是找不到模板。我不确定我是否正确设置了配置,但它永远找不到我的模板。这是我的spring bean配置:

<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="/WEB-INF/freemarker/"/>
</bean>

每当我尝试在 freemaker 配置上调用 getTemplate 时,它​​总是会返回一个找不到模板的错误。所以如果我这样做

configuration.getTemplate("testTemplate.ftl") 

它总是抛出一个 IOException。

我不确定是否有人知道我做错了什么。

感谢你的帮助!

4

4 回答 4

1

我刚刚遇到了同样的问题,最后,我决定使用以下方法:

Configuration configuration = new Configuration();
FileTemplateLoader templateLoader = new FileTemplateLoader(new File(YOUR_BASE_TEMPLATE_DIR));
configuration.setTemplateLoader(templateLoader);
freemarker.template.Template template = configuration.getTemplate(YOUR_TEMPLATE_NAME);
template.process(datamodel, writer);
于 2010-05-08T09:46:25.460 回答
0

首先,/WEB-INF/freemarker只能作为来自内部的路径WebApplicationContext;否则 Spring 会尝试将其解析为文件系统路径而不是 servlet 上下文路径。您在上面发布的摘录是否来自正在加载的上下文DispatcherServlet

其次,你有什么理由configuration直接使用而不是使用 Spring 的ViewResolver

最后,IOException可能意味着许多不同的东西。您可以发布完整的堆栈跟踪吗?

于 2009-11-25T21:55:09.637 回答
0

我认为您必须确保文件“testTemplate.ftl”位于文件夹“/WEB-INF/freemarker/”中

于 2012-08-20T09:15:08.597 回答
0

您也可以将其设置为

    @Bean
    public FreeMarkerConfigurationFactoryBean freemarkerConfiguration() {
        FreeMarkerConfigurationFactoryBean bean = new FreeMarkerConfigurationFactoryBean();
        bean.setTemplateLoaderPath("classpath:/templates/");
        return bean;
    }

在你的情况下:

    <property name="templateLoaderPath" value="classpath:/WEB-INF/freemarker/"/>
于 2019-03-08T11:58:17.803 回答