0

我需要使用一些参数从 JSR286(IBM) portlet 重定向到 JSF 2.0 portlet。

我也有页面唯一的 id 和友好的 url。

我已经尝试过 response.sendRedirect() 和 requestDispatcher.forward() 但直到现在都没有成功。

请给我一些解决方案。

4

1 回答 1

1

为了在 portlet 之间导航,您不应该简单地转发或重定向页面,因为这不是要走的路。在 portlet 之间(甚至在不同页面上)进行通信的正确方法是使用 portlet 间通信 (IPC),通常称为 portlet 连接。

但这一切都取决于您对“JSR286(IBM) portlet”的含义。portlet 是遵循全球规范的 JSR-286 portlet(对于所有供应商,IBM、Apache、Oracle、Liferay 等都是相同的),或者在最后一种情况下,您有一个使用 IBM API/iWidgets 的 portlet ,如果我从文档中没记错的话,portlet 接线是不可能的。

无论如何,不​​管 JSF 与否,JSF 2.0 portlet 仍然是 JSR-286 portlet,因此在这种情况下您也可以使用普通事件,尽管我没有 JSF 经验。两个 portlet 都应该有一个 portlet 描述符,您可以在其中声明:

  • 事件,使用<event-definition>. 请注意,当您的 JSF-portlet 位于单独的 portlet 应用程序中(在不同的portlet.xml文件中)时,您将不得不使用 XName,而不是普通名称。
  • 特定 portlet 可以使用<supported-publishing-event>(您的 JSR-286 portlet)发布的事件
  • 特定 portlet 可以使用<supported-processing-event>(您的 JSF 2.0 portlet)订阅的事件

之后,您可以使用该方法在ACTION阶段中发送 JSR-286 portlet 中的事件。ActionResponse.setEvent()

从 JSF 2.0 portlet 中,您应该仍然能够从上下文中获取PortletRequest/ 。PortletResponse如果您检查它是否是 的实例EventRequest,则可以使用 检索参数EventRequest.getEvent(),从而允许您在 portlet 之间传递参数。

如果您的 portlet 位于不同的页面上,您将必须获得 WebSphere Portal 的管理(我假设您正在运行它,因为您在谈论 IBM),并为页面定义全局目标,以便可以跨触发事件-page(否则连接仅适用于同一页面中的 portlet)。

于 2015-08-13T08:47:59.337 回答