如何实现自定义ViewProcessor <t>(jax-rs)?</t>

时间:2011-10-28 15:33:18

标签: java java-ee jersey el jax-rs

查看文章here,有一个示例说明如何使用TemplateProcessor来使用Jersey解析JSP视图。显然这个类现在已被弃用,并被ViewProcessor&lt; T&gt;取代。我对如何实现它感到有些困惑(最好是新的,因为它没有被弃用);什么作为模板参数?如何实现一个简单地解析/ WebContent / WEB-INF / views / *中的jsps并评估返回视图的表达式语言?

另一个ViewProcessor article is here.

感谢。

1 个答案:

答案 0 :(得分:3)

如果要插入对新类型模板的支持,则应实现ViewProcessor。如果您只需要JSP模板,那么它已经内置在Jersey中,您不需要实现自己的ViewProcessor。

如果JSP文件位于WEB-INF / views下,则可以将JSP_TEMPLATES_BASE_PATH init参数设置为WEB-INF / views。然后,您只需要从资源方法返回一个新的Viewable实例(如您所指的Paul的博客所示),并将模板名称作为第一个参数传递,将数据(模型)作为第二个参数传递给构造函数。然后在JSP中,您可以使用名为“it”的属性访问数据。

更新:如果你的url-pattern是“/ *”,那就有点复杂了。委托给容器时,Jersey无法解析模板,因为Jersey servlet正在掩盖JSP。为了使容器能够看到JSP,您还需要做两件事:

  1. 将Jersey servlet注册为过滤器而不是servlet(只需在web.xml中用filter替换servlet的出现) - 请参阅此javadoc页面的底部:http://jersey.java.net/nonav/apidocs/latest/jersey/com/sun/jersey/spi/container/servlet/package-summary.html
  2. PROPERTY_WEB_PAGE_CONTENT_REGEX init参数添加到过滤器并将其设置为jsp模板匹配的正则表达式(例如“/ WEB-INF / views /.*")
  3. 如果您仍然认为必须出于某种原因实施自定义ViewProcessor,您可以查看freemarker视图处理器的实现方式并从中受到启发 - 请参阅http://java.net/projects/jersey/sources/svn/content/trunk/jersey/contribs/jersey-freemarker/src/main/java/com/sun/jersey/freemarker/FreemarkerViewProcessor.java?rev=5453