Freemarker template not found

三世轮回 提交于 2019-12-07 08:28:43

问题


I'm currently trying to get Freemarker to work with my application using Spring. No matter what I try I keep getting template not found. I am not sure if I have the configuration set up properly, but it never finds my template. Here is my spring bean config:

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

Whenever I try to call getTemplate on the freemaker configuration it always sends back a template not found error. So if I do

configuration.getTemplate("testTemplate.ftl") 

it always throws an IOException.

I'm not sure if anyone has an idea of what I'm doing wrong.

Thanks for all your help!


回答1:


First of all, /WEB-INF/freemarker would only work as a path from within WebApplicationContext; otherwise Spring would attempt to resolve it as file system path rather than servlet context path. Is the excerpt you've posted above from the context being loaded by DispatcherServlet?

Secondly, is there any reason why are you using configuration directly instead of using Spring's ViewResolver?

Finally, IOException can mean many different things. Can you post a full stack trace?




回答2:


I think you must make sure that the file "testTemplate.ftl" is in the folder "/WEB-INF/freemarker/"




回答3:


you can also set it like

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

In your case:

    <property name="templateLoaderPath" value="classpath:/WEB-INF/freemarker/"/>



回答4:


I've just had the same kind of problem and, at the end, I decide to use the approach below:

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);


来源:https://stackoverflow.com/questions/1799614/freemarker-template-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!