jersey-freemarker无法解析模板

时间:2014-03-19 08:52:08

标签: jersey jetty classpath freemarker

我正在尝试创建一个简单的jersey-freemarker webapp,我正在使用jetty-maven-plugin运行。 但FreemarkerViewProcessor无法找到我的模板。

我使用@Path("/")方法在@GET public Viewable getIndex()创建了一个泽西资源,一旦我请求http://localhost:8080/,就会调用该方法。 此Viewable设置为使用"index"模板。

假设资源为com.example.MainResource(位于src/main/java/com/example/MainResource.java),index.ftl模板文件位于src/main/webapp/templates/com/example/MainResource/index.ftl

在我的servlet设置中,我使用配置templatesMap告诉jersey-freemarker config.put(FreemarkerViewProcessor.FREEMARKER_TEMPLATES_BASE_PATH, "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/目录添加到类路径的建议。

1 个答案:

答案 0 :(得分:0)

当我发现here时,使用我自己的FreemarkerViewProcessor并不困难。所以我复制了jersey-freemarker实现并对其进行了修改,以使用我绑定在Configuration中的Guice注入的ServletModule对象。

现在我不再需要jersey-freemarker模块,我可以跳过servlet config Map中的内容以供freemarker使用。