0

我正在使用 liferay 1.8.2 和 liferay 5.2。我在不同的战争文件中有许多 portlet,我尝试了 liferay 文档中的示例,以了解如何在多个战争中的不同 portlet 之间共享数据,但没有成功。

  1. 使用会话共享,我无法将数据从第一个 portlet 获取到第二个 portlet,即使数据在 portletsession 应用程序范围内。
  2. 当我使用基于偶数的机制时,我在使用 <portlet:defineObjects /> and <portlet:actionURL />标签时出现错误

原因:javax.faces.FacesException:无法执行 JSP 生命周期。
在 com.icesoft.faces.webapp.parser.Parser.parse(Parser.java:181)
在 com.icesoft.faces.application.D2DViewHandler.renderResponse(D2DViewHandler.java:439)
... 189 更多原因:javax。 servlet.jsp.JspException:
com.liferay.taglib.portlet.ActionURLTag.doEndTag(ActionURLTag.java:212)
处的 java.lang.reflect.InvocationTargetException com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java :246)
在 com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
在 com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
在 com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
在 com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
在 com.icesoft.faces.webapp .parser.Parser.executeJspLifecycle(Parser.java:229)
at com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
at com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser .java:229)
at com.icesoft.faces.webapp.parser.Parser.parse(Parser.java:162)
... 190 多个
原因:java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
在 java.lang.reflect.Method.invoke(Method.java:597)
在 com.liferay.portal.kernel.util.MethodInvoker.invoke(MethodInvoker.java :180)
在 com.liferay.portal.kernel.util.MethodInvoker.invoke(MethodInvoker.java:49)
在 com.liferay.taglib.portlet.ActionURLTag.doTag(ActionURLTag.java:179)
在 com.liferay.taglib。 portlet.ActionURLTag.doEndTag(ActionURLTag.java:200) ... 199 更多
原因:javax.servlet.jsp.JspException: java.lang.UnsupportedOperationException
at com.liferay.portal.servlet.taglib.portlet.ActionURLTagUtil.doEndTag( ActionURLTagUtil.java:174)
... 207 更多
引起: com.liferay.portal.servlet.taglib.portlet.TagUtil.getPortletName(TagUtil.java:
com.icesoft.faces.webapp.parser.StubHttpServletRequest.getAttribute(StubHttpServletRequest.java:116)
100)
在 com.liferay.portal.servlet.taglib.portlet.ActionURLTagUtil.doEndTag(ActionURLTagUtil.java:68)

任何人都可以用详细的解释和示例代码来建议,我如何在不同 WAR 的 portlet 之间实现 IPC

4

1 回答 1

1

使用 IceFaces 1.8.x 无法跨不同的 WAR 实现 Portlet 间通信 (IPC)。

当 IceFaces 2.0 发布时,Alpha 已经可用。

但是,可以使用 IceFaces 1.8.x 进行某种 IPC。Icefaces 开发者指南的“高级主题”一章涵盖了这个主题:

Ajax Push 的使用允许基于改变当前视图状态的服务器端事件来更新portlet。这可能是一个强大的功能,也可以用来在某些配置中进行某种形式的门户网站间通信 (IPC)。

IPC 仅在 Portlet 1.0 规范 (JSR 168) 中提及,但在 Portlet 2.0 规范 (JSR 286) 中正式定义。

它被构建为事件/侦听器模型。但是,可以使用 ICEfaces Ajax Push 机制根据对底层模型的更改来更新 portlet。目前使用 ICEfaces 的方法是:

  • 在同一个存档(.war 文件)中部署需要通信的 portlet。
  • 使用应用程序范围的 bean 来管理
    portlet 之间的共享状态。

  • 使用 ICEfaces Ajax Push 功能在共享状态更改时触发客户端更新。
  • 有关如何执行此操作的示例,请查看示例 ICEfaces Chat portlet。
于 2010-01-11T15:46:34.213 回答