Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Freemarker Configuration, Template Not Found

I have a Spring/JSF Web application which has a dependency to a module uses Freemarker templates. Here is what i did for integration:

I imported the applicationContext-freemarker-module.xml to applicationContext.xml I added the configuration bean to applicationContext-freemarker-module.xml like below.

 <bean id="freemarkerConfiguration" class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
   <property name="templateLoaderPath" value="classpath*:/"/>
 </bean>

I put my templates to src/main/resources directory of freemarker module. I am reading the templates like below:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-freemarker-module.xml");

Configuration templateConfig = (Configuration) context.getBean("freemarkerConfiguration");

Template template = templateConfig.getTemplate("template.ftl");

Now i tried so many values for templateLoaderPath property but i always got the "Template not found." exception.

Freemarker module's JAR is like below

template.ftl
applicationContext-freemarker-module.xml
com/.../ (classes)
META-INF

Where should i put the template files and what should i set for templateLoaderPath value? I could not understand why "template.ftl" can not be found. I am trying to set the right value for many hours. I tried various path configurations without success.

Thanks a lot for your help,

like image 606
jiraiya Avatar asked Apr 03 '11 17:04

jiraiya


2 Answers

Make sure you have the following

  1. In your *-action servlet xml FreeMarkerConfigurationFactoryBean configuration has the "preferFileSystemAccess" property set to "false"

  2. <property name="templateLoaderPath" value="classpath*:/"/> should be <property name="templateLoaderPath" value="classpath:/"/>

    In freemarker the template loader tries to match a string "classpath:" , not "classpath*:"

  3. you have the JAR file under WEB-INF/lib folder.

  4. Finally, your template file under root of the jar file.

like image 175
Jay Avatar answered Sep 29 '22 04:09

Jay


Use some bean like this:

<bean
    class="org.springframework.ui.freemarker.FreeMarkerConfigurationFactoryBean">
    <property name="templateLoaderPath" value="classpath:META-INF/freemarker/" />
    <property name="preferFileSystemAccess" value="false" />
</bean>

Hope this help you.

like image 25
Defrag Avatar answered Sep 29 '22 03:09

Defrag