2012-03-14 80 views
0

我從classpath加載的aSpring MVCapplication中有一個資源。從類路徑加載freemarker模板

<bean id="myController" class="com.MyController"> 
     <property name="myTemplate" value="classpath:myTemplate.txt"/> 

</bean> 

,我試圖用這個代碼,將其加載爲Freemarker模板:

private Resource myTemplate; 

... 

Configuration cfg = new Configuration(); 
cfg.setClassForTemplateLoading(this.getClass(), "/"); 
Template tpl = cfg.getTemplate(myResource.getFilename()); 

,但我一直在結束了:java.io.FileNotFoundException:模板類路徑:myTemplate.txt未找到。

我試圖實施什麼wassuggested here但它似乎沒有幫助。

我可以findso迄今唯一黑客是刪除「類路徑:從文件名前綴字符串,但我不想做

任何想法...

回答

3

所以你說的是什麼?你不想從模板名稱中刪除"class:",並且根據this question你不想教FreeMarker通過定製的TemplateLoader來理解它。我的意思是,如果你禁止這些,還有什麼可以解決這個問題呢?只能建議你做最後一個;實施自定義TemplateLoader(或者只刪除"class:"前綴,然後委託給ClassTemplateLoader,或者,甚至更好,只是代表春季ResourceLoader)。這就是你如何配置FreeMarker來做你想做的事情。這不是什麼極端的事情,實施你自己的TemplateLoader

更新:它可能通過有用知道默認有FreeMarker的模板名稱語法和Spring的資源名語法不匹配。根據Spring語法,您可以編寫"classpath:foo.ftl"或​​。但FreeMarker認爲方案部分總是以://結尾,而孤獨的::/沒什麼特別的。因此,所有這些資源路徑將被視爲相對路徑,因此當前模板目錄將在實際模板解析之前添加在它們之前。爲了解決這個問題,由於FreeMarker 2.3.22,你可以使用Configuration.setTemplateNameFormat(TemplateNameFormat.DEFAULT_2_4_0)template_name_format=DEFAULT_2_4_0Properties),它確實認爲:作爲方案分隔符。

+0

我想你是對的,我會繼續使用TemplateLoader – Joly 2012-03-20 12:24:41