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

标签 java jakarta-ee jersey el jax-rs

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

其他ViewProcessor article is here.

谢谢。

最佳答案

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

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

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

  1. 将 Jersey servlet 注册为过滤器而不是 servlet(只需在 web.xml 中用过滤器替换出现的 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过滤器的初始参数并将其设置为 jsp 模板匹配的正则表达式(例如“/WEB-INF/views/.*”)

如果您仍然认为出于某种原因必须实现自定义 ViewProcessor,您可以查看 freemarker View 处理器的实现方式并从中获得启发 - 请参阅 http://java.net/projects/jersey/sources/svn/content/trunk/jersey/contribs/jersey-freemarker/src/main/java/com/sun/jersey/freemarker/FreemarkerViewProcessor.java?rev=5453

关于java - 如何实现自定义 ViewProcessor<T> (jax-rs)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931469/

相关文章:

java - 由于事务传播无法 Autowiring 组件

java - 列表内的映射,想要检索所有映射并将其值存储到另一个列表

spring - 在 Spring 4.0 中使用 Jersey-spring

java - Android-使用 eclipse 安装到设备一次安装同一应用程序的两个实例-错误

java - 如何在没有 JRebel 的情况下使用 Eclipse 和 WebLogic 11g 热交换 JSF xhtml 文件?

java - 通过 web.xml 的速度属性文件

java - 在内存对象缓存中开发

java - Java 后端中正确(且快速)的参数检查

java - 如何为 Mule 和 Jersey 使用 Grizzly 嵌入式服务器

java - 如何 Swagger 注释嵌套 REST 资源?