使用 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 dxp 7.3:如何添加第三方jars进行全局共享?
JSF:使用带有 ICEfaces 的 AJAX 推送 (ICEpush)
在 Icefaces 中使用 Spring Security 登录不起作用