使用 liferay 和 icefaces 共享 Portlet 数据

Posted

技术标签:

【中文标题】使用 liferay 和 icefaces 共享 Portlet 数据【英文标题】:Portlet Data sharing using liferay and icefaces 【发布时间】:2010-01-09 15:28:55 【问题描述】:

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

    使用会话共享,我无法将数据从第一个 portlet 获取到第二个 portlet,即使数据在 portletsession 应用程序范围内。 当我使用基于偶数的机制时,我在使用 <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: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 在 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 在 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) 在 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】:

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

IceFaces 2.0 发布后,Alpha 已经可用。

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

使用 Ajax Push 允许 portlet 根据服务器端更新 改变状态的事件 目前来看。这可以是一个强大的 也可以利用的功能 做一个形式的interportlet 通信(IPC)在某些 配置。

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

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

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

【讨论】:

以上是关于使用 liferay 和 icefaces 共享 Portlet 数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Liferay 中如何共享从开发环境到测试环境的内容?

Liferay dxp 7.3:如何添加第三方jars进行全局共享?

JSF:使用带有 ICEfaces 的 AJAX 推送 (ICEpush)

在 Icefaces 中使用 Spring Security 登录不起作用

JSF、RichFaces、PrimeFaces 和 IceFaces 之间的区别

为 JSF/ICEfaces 设置浮点格式化语言环境?