2011-04-03 66 views
5

我有一個Spring/JSF Web應用程序,它對模塊有依賴性,使用Freemarker模板。以下是我爲集成所做的工作:Spring Freemarker配置,找不到模板

我將applicationContext-freemarker-module.xml導入到applicationContext.xml中 我將配置bean添加到applicationContext-freemarker-module.xml中,如下所示。

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

我把我的模板放到了freemarker模塊的src/main/resources目錄下。 我讀的模板象下面這樣:

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

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

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

現在,我嘗試了許多值templateLoaderPath財產,但我總是得到「模板沒有找到。」例外。

Freemarker的模塊的JAR就像下面

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

我應該在哪裏放置模板文件,我應該怎麼設置templateLoaderPath價值? 我無法理解爲什麼找不到「template.ftl」。我試圖設置正確的價值很多小時。我嘗試了各種路徑配置但沒有成功。

非常感謝您的幫助,

+0

你有沒有試過''?如果.ftl文件在jar的根目錄下,這應該可以工作... – javanna 2011-04-03 18:00:30

+0

是的,我試過了,仍然無法找到.ftl文件。非常感謝您的回覆。 – jiraiya 2011-04-03 18:18:59

回答

11

確保您有以下

  1. 在你* -action servlet的XML FreeMarkerConfigurationFactoryBean配置具有 「preferFileSystemAccess」 屬性設置爲 「假」

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

    在freemarker中,模板加載器試圖匹配一個條帶g「classpath:」,而不是「classpath *:」

  3. 您在WEB-INF/lib文件夾下有JAR文件。

  4. 最後,你的模板文件在jar文件的根目錄下。

+2

+1 for preferFileSystemAccess = false – 2011-07-01 19:49:48

+0

Yeaaaaah!這是完全正確的答案;-) – 2012-06-05 14:49:22

+0

對我來說有點不同:我有「classpath:templates」,它不能在Jetty上工作,將其更改爲「classpath:templates /」,它工作正常! – dannrob 2014-08-28 21:39:19

3

使用一些綠豆這樣的:

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

希望這有助於你。