Spring Freemarker Configuration, Template Not Found

巧了我就是萌 提交于 2019-12-07 04:51:31

问题


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,


回答1:


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.




回答2:


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.



来源:https://stackoverflow.com/questions/5531131/spring-freemarker-configuration-template-not-found

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