Java 如何在Portlet(IPC)和Liferay Portlet之间传递对象

Java 如何在Portlet(IPC)和Liferay Portlet之间传递对象,java,event-handling,liferay,ipc,portlet,Java,Event Handling,Liferay,Ipc,Portlet,我需要帮助,这真让人困惑。 我试着按照web上所有关于IPC的例子,使用事件在portlet之间传递参数 如果我只想使用事件传递我的属性,下面是我的代码: QName qName = new QName("http://liferay.com/events", "ipc.send"); response.setEvent(qName, pitchType); 然后在我的getter事件Portlet中输入我的代码 @ProcessEvent(qname = "{http://liferay.c

我需要帮助,这真让人困惑。 我试着按照web上所有关于IPC的例子,使用事件在portlet之间传递参数

如果我只想使用事件传递我的
属性
,下面是我的代码:

QName qName = new QName("http://liferay.com/events", "ipc.send");
response.setEvent(qName, pitchType);
然后在我的getter事件Portlet中输入我的代码

@ProcessEvent(qname = "{http://liferay.com/events}ipc.send")
public void catchBall(EventRequest request, EventResponse response) {
    Event event = request.getEvent();
    String send = (String) event.getValue();
    response.setRenderParameter("send", send);
}
它只传递一个参数和一个字符串。 我尝试将对象(如
Foo
)传递到此参数,但没有成功。它跑不了。 知道如何通过事件传递对象吗


请在此处确实需要帮助..:(

将自定义对象作为事件参数传递可能很棘手,特别是当您跨越插件边界时:在这种情况下,类必须对两个插件都可用,否则事件自然无法正确接收

一个常见的建议是在UI层上保持通信(例如,在portlet事件中)非常肤浅,不依赖重型对象。请记住,这种通信不应该是真正的业务层,因此传递真实数据的标识符、主键或其他占位符是可以的。假设可能没有人对接收事件感兴趣,那么您不应该一开始就花费太多精力来构建事件


或者,您可以将感兴趣的对象缓存在业务层上,这样,如果它确实正在处理(例如,如果接收到事件),它将很快可用。

您好,我可以使用Session request.getPortletSession().setAttribute(“foo1”,foo)传递对象;可以吗?像这样使用portlet会话?这是最明显的数据共享,但从体系结构的角度来看,它只实现了一个全局变量,而不是显式的通信通道-因此,为了干净的体系结构,我建议反对这种技术。