我正在嘗試創建一個簡單的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設置中,我使用配置Map
:config.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
,其最高審計機關使用類加載器基於模板加載器。 根據@ddekany的comment,我應該將我的templates/
放入WEB-INF/classes/
。對我來說感覺很髒;這似乎應該由Maven來照顧。
由於FreemarkerViewProcessor
的設計(始終使用類加載器配置),我發佈了this follow-up question。同時,建議告訴我如何將src/main/webapp/
目錄添加到類路徑中,這也是值得歡迎的。
FreeMarker使用一個由'TemplateLoader'對象實現的虛擬文件系統。所以你應該檢查那裏使用了什麼樣的'TemplateLoader'。就好像它是基於類加載器的,那麼當然你應該把模板放在'WEB-INF/classes/templates/...'下。另一個常用的位置是'WEB-INF/templates/...'。 – ddekany
我已經更新了這個問題,看起來'jersey-freemaker'實現有一些限制。但我不知道如何克服這些。 – derabbink