2014-03-19 62 views
0

我正在嘗試創建一個簡單的jersey-freemarker webapp,我正在使用jetty-maven-plugin運行。 但FreemarkerViewProcessor不會找到我的模板。運動衫freemarker未解析模板

我使用@GET public Viewable getIndex()方法創建了球衣資源@Path("/"),該方法一旦請求​​就會被調用。 此Viewable設置爲使用"index"模板。

假設資源是com.example.MainResource(位於src/main/java/com/example/MainResource.java),而index.ftl模板文件位於src/main/webapp/templates/com/example/MainResource/index.ftl

在我的servlet設置中,我使用配置Mapconfig.put(FreemarkerViewProcessor.FREEMARKER_TEMPLATES_BASE_PATH, "templates");告訴jersey-freemarker關於templates目錄。 當調試FreemarkerViewProcessor時,我發現它的確在尋找基於路徑/templates/com/example/MainResource/index.ftl的模板資源。

我應該在哪裏放置我的模板文件,以便FreemarkerViewProcessor能找到它們?或者,我如何將我的templates目錄包含在類路徑中?

PS:mvn jetty:run產生以下輸出(部分):

[INFO] Configuring Jetty for project: jettytest-servlet 
[INFO] webAppSourceDirectory not set. Trying src/main/webapp 
[INFO] Reload Mechanic: automatic 
[INFO] Classes = ~/jettytest-servlet/target/classes 
[INFO] Context path =/
[INFO] Tmp directory = ~/jettytest-servlet/target/tmp 
[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml 
[INFO] Web overrides = none 
[INFO] web.xml file = file:~/jettytest-servlet/src/main/webapp/WEB-INF/web.xml 
[INFO] Webapp directory = ~/jettytest-servlet/src/main/webapp 

更新:
FreemarkerViewProcessor總是使用默認Configuration,其最高審計機關使用類加載器基於模板加載器。 根據@ddekanycomment,我應該將我的templates/放入WEB-INF/classes/。對我來說感覺很髒;這似乎應該由Maven來照顧。

由於FreemarkerViewProcessor的設計(始終使用類加載器配置),我發佈了this follow-up question。同時,建議告訴我如何將src/main/webapp/目錄添加到類路徑中,這也是值得歡迎的。

+0

FreeMarker使用一個由'TemplateLoader'對象實現的虛擬文件系統。所以你應該檢查那裏使用了什麼樣的'TemplateLoader'。就好像它是基於類加載器的,那麼當然你應該把模板放在'WEB-INF/classes/templates/...'下。另一個常用的位置是'WEB-INF/templates/...'。 – ddekany

+0

我已經更新了這個問題,看起來'jersey-freemaker'實現有一些限制。但我不知道如何克服這些。 – derabbink

回答

0

當我發現here,使用我自己的FreemarkerViewProcessor並不困難。因此,我複製了無運動標記實現並將其調整爲使用Guice注入的Configuration對象,該對象綁定在我的ServletModule中。

現在我不再需要jersey-freemarker模塊了,我可以跳過將東西放在servlet配置Map for freemarker中。