2010-01-09 88 views
0

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

  1. 使用sesssion共享,我无法将数据从第一个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在com.icesoft.faces java.lang.reflect.InvocationTargetException
在com.liferay.taglib.portlet.ActionURLTag.doEndTag(ActionURLTag.java:212)
:更 引起:javax.servlet.jsp.JspException。 webapp.parser.Parser.executeJspLifecycle(Parser.java:246)
at com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
at com.icesoft.faces.webapp.parser。 Parser.execut eJspLifecycle(Parser.java:229)
在com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(Parser.java:229)
在com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle(分析器。的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.parse(Parser.java:162)
.. 190多
C在sun.reflect.DelegatingMethodAccessorImpl在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
:由aused。 invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.liferay.portal.kernel.util.MethodInvoker.invoke(MethodInvoker.java:180)
at com.liferay.portal.kernel.util.MethodInvoker.invoke(MethodInvoker.java:49)
at com.liferay.taglib.portlet.ActionURLTag.doTag(ActionURLTag.java:179在COM java.lang.UnsupportedOperationException
:)
在com.liferay.taglib.portlet.ActionURLTag.doEndTag(ActionURLTag.java:200) ... 199多个
引起:javax.servlet.jsp.JspException .liferay.portal.servlet.taglib.portlet.ActionURLTagUtil.doEndTag(ActionURLTagUtil.java:174)
... 207多个
引起的:在com.icesoft.faces.webapp.parser java.lang.UnsupportedOperationException
。StubHttpServletRequest.getAttribute(StubHttpServletRequest.java:116)
在com.liferay.portal.servlet.taglib.portlet.TagUtil.getPortletName(TagUtil.java:100)
在com.liferay.portal.servlet.taglib.portlet。 ActionURLTagUtil.doEndTag(ActionURLTagUtil.java:68)

任何人都可以用详细的解释和示例代码提示,我怎么能住在不同的WAR Portlet之间实现IPC

+0

为什么在这里发布愚蠢的问题,当你不需要答案? – Sylar 2010-01-21 09:51:04

回答

1

Portlet间通讯联络(IPC)是不可能的使用IceFaces 1.8.x跨越不同的WAR。

当IceFaces 2.0不在时,Alpha可用。

但是,使用IceFaces 1.8.x可以做某种IPC。 ICEfaces的Develpers指南的“高级主题”一章涵盖了这个话题:

使用Ajax推送的允许portlet 是基于服务器端的是改变 当前视图状态 事件更新。这可以是强大的 功能,该功能也可以用于在某些 配置中执行某种形式的interportlet 通信(IPC)。

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

它被设计为一个Event/Listener 模型。但是,基于对基础模型 的更改,可以使用ICEfaces Ajax Push机制的 更新 更新Portlet。与ICEfaces的做 这个目前的方法是:

  • 部署需要在同一归档通信(的.war 文件)的门户。
  • 使用应用程序范围的bean来管理
    portlet之间的共享状态。
  • 当共享状态改变时,使用ICEfaces Ajax Push功能触发客户端更新
  • 有关如何执行此操作的示例,请查看示例ICEfaces Chat portlet。