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