2013-03-04 66 views
1

我想在我的XPages應用程序中使用Freemarker模板引擎,但無法在XPage環境中使用它。我遇到的問題與模板路徑有關,我不知道如何正確設置。 Freemarker簡單地假設模板位於文件系統的某個位置。我把我的模板文件放到相關的java類存在的目錄中。這樣的文件的路徑是這樣的這不適合我。有沒有人有這方面的經驗?我只需要File()構造函數接受的nsf的目錄路徑。這個虛擬的xspnsf://....對於java File對象來說是不可理解的。在需要Freemarker幫助時使用XPages

這裏是Freemarker的模板路徑代碼:

Configuration cfg = new Configuration(); 
cfg.setDirectoryForTemplateLoading(new File("??????")); 
Template temp = cfg.getTemplate("tmp.ftl"); 
+0

Freemarker似乎使用Java中的普通File類。他們無法從URI加載文件。除非您可以將模板作爲流提供(您需要包含的解析器類),否則Freemaker不適合 – stwissel 2013-03-04 14:40:47

+0

您是否對使用XPage的其他模板系統有過使用經驗? – 2013-03-04 14:56:52

+0

@stwissel:請您在下次回答之前查看手冊或API文檔... FreeMarker可以從URI-s(請參閱URLTemplateLoader),從「classpath」(「 ClassTemplateLoader'),來自Webapp上下文('WebappTemplateLoader')。另外,通過實現'TemplateLoader'接口,您可以輕鬆地從任何其他資源加載。您只需創建您需要的'TemplateLoader'並將其傳遞給'Configuration.setTemplateLoader'。 FreeMarker並不認爲模板完全是純文件。 – ddekany 2013-03-04 21:21:41

回答

0

嘗試使用Velocity(http://velocity.apache.org/)來代替。它允許您創建自定義資源加載器,可以輕鬆地從任意位置加載模板(例如,從notes db中的文檔加載)。

我已經看到它在不同的xpage項目中使用過多次,並且效果很好。

+0

感謝您的提示!我有一個來自Apache Click的速度體驗,從來沒有意識到自定義資源加載器是可能的... – 2013-03-04 18:01:48

+0

它也可能在FreeMarker BTW中。參見'TemplateLoader'和'Configuration.setTemplateLoader'。 – ddekany 2013-03-04 21:23:24

1

由於您將模板與類一起存儲(如果我理解的很好),您不能使用cfg.setClassForTemplateLoading(SomeClassFromThere.class, "/com/example/yourapplication/templates")