Portlet使用liferay和icefaces共享数据

时间:2010-01-09 15:28:55

标签: java liferay portlet sharing icefaces

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

  1. 通过sesssion共享,我无法将数据从第一个portlet获取到第二个portlet,即使数据位于portletsession应用程序范围内也是如此。
  2. 当我使用基于偶数的机制时,我在使用时遇到错误 <portlet:defineObjects /> and <portlet:actionURL />代码
  3.   

    引起: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:java.lang.reflect.InvocationTargetException
          在com.liferay.taglib.portlet.ActionURLTag.doEndTag(ActionURLTag.java:212)
          在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)
          在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更多
       引起:java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          at 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)
          at com.liferay.taglib.portlet.ActionURLTag.doEndTag(ActionURLTag.java:200)       ... 199更多
       引起:javax.servlet.jsp.JspException:java.lang.UnsupportedOperationException
          在com.liferay.portal.servlet.taglib.portlet.ActionURLTagUtil.doEndTag(ActionURLTagUtil.java:174)
          ...... 207更多
       引起:java.lang.UnsupportedOperationException
          在com.icesoft.faces.webapp.parser.StubHttpServletRequest.getAttribute(StubHttpServletRequest.java:116)
          at 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

1 个答案:

答案 0 :(得分:1)

使用IceFaces 1.8.x的不同WAR之间不可能使用Inter Portlet Commication(IPC)。

当IceFaces 2.0出局时,Alpha已经可以使用了。

但是,可以使用IceFaces 1.8.x进行某种IPC。 Icefaces Develpers Guide的“高级主题”章节涵盖了这一主题:

  

使用Ajax Push允许portlet   基于服务器端进行更新   改变状态的事件   目前来看。这可能是一个强大的   功能也可以利用   做一种形式的小门   通信(IPC)   配置。

     

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

     

它被构建为事件/侦听器   模型。但是,可以使用   ICEfaces Ajax推送机制   根据更改来更新portlet   基础模型。要做的方法   目前ICEfaces的目的是:

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