问题
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