views:

505

answers:

2

Hi, 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  A: 

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?

ChssPly76
Thanks for the response! I thought there was some kind of path issue....so I'm trying to use freemarker to help send emails by using templates. I was originally thinking that the ViewResolver was a little to much. So I thought it would be better to use the configuration instead...not sure if that is the correct thing to do. As for the IOException, the message coming back is template not found.
brock
Oh and I am configuring the bean in the applicationContext.xml file. I did not put that in the DispatchServlet.
brock
How is context created for that "applicationContext.xml" (what Spring class is used to create it)? If it does **not** descend from WebApplicationContext, it will **not** be able to get anything from "/WEB-INF" - not unless you specify an absolute filesystem url.
ChssPly76
Thanks ChssPly76. I'm using the Classpath Application context to load my applicationContext.xml. How would I load the WebApplicationContext? Is that the right context to use in a web application?
brock
It's normally loaded by `DispatcherServlet` (http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html#mvc-servlet) but you can create it manually (http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/context/support/GenericWebApplicationContext.html) and pass servlet context to it.
ChssPly76
A: 

Hi there!

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

Cheers,

Luismy

Luismy