0

我在 Liferay 的同一页面上使用了 2 个 Vaadin Portlet。第一个显示条目表,每一行都有一个按钮来显示有关此条目的详细信息。

单击按钮时,将发送 IPC 事件,该事件由第二个 portlet 接收,然后切换到显示内容的表格视图。

通过单击第一个 portlet 上的关闭按钮,第二个 portlet 将再次收到 IPC 事件并返回到其原始状态,这是一个空白视图,仅附加了 Liferay IPC 侦听器。

我的问题是,在第三次单击后,Liferay 出现了不同步错误。当视图改变时,我总是将它附加到主窗口。所以我不创建具有相同名称的其他窗口。

当我在页面上只使用一个 portlet 时,我可以毫无问题地来回切换。可能是浏览器在某些时候想要在客户端触发一个事件,但 IPC 已经在服务器端消失了?

很难确定这个问题的根源。

4

1 回答 1

0

你在正确的轨道上。IPC 在客户端工作,不同步是由从客户端调用到服务器的不存在的组件引起的。

可能有一些原因导致这种情况,但需要检查一些场景:

  • 你说你有一个清除显示的关闭按钮。调用 Application.close() 可能吗?这实际上可能会导致创建和调用一个新的(服务器端)应用程序实例,而不是原来的。
  • 您可能正在创建 IPC 组件的新实例,但旧实例仍已注册并尝试发送某些内容(到其不存在的服务器部分)。
  • JavaScript 计时问题可能会导致 IPC 事件以您可能期望的不同顺序发送。如果行为始终一致,我认为这不太可能,但仍有可能。

希望这可以帮助您缩小案例范围并找到解决方案。保持这个问题更新。

于 2012-08-31T06:25:33.777 回答