Reputation: 165
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!
Upvotes: 4
Views: 24251
Reputation: 1977
This worked for me:
configuration.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(), "/templates");
Upvotes: 0
Reputation: 2146
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/"/>
Upvotes: 0
Reputation: 1
I think you must make sure that the file "testTemplate.ftl" is in the folder "/WEB-INF/freemarker/"
Upvotes: -1
Reputation: 51
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);
Upvotes: 3
Reputation: 100686
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?
Upvotes: 0