2010-01-09 98 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。