繁体   English   中英

AJAX是否可以进行内部portlet通信?

[英]Is AJAX for inter portlet communication possible?

我知道您可以创建可以刷新其内容的portlet,而无需通过简单地使用JSR286 resourceURL标记和执行AJAX调用来刷新整个门户页面。

我的问题是,是否可以在Portlet A中进行AJAX调用,并以某种方式定位并动态更新Portlet B?

当您通过actionURL或事件进行portlet间通信时,我们的想法是避免谁门户页面刷新(重新呈现)。

您可以使用jQuery trigger()和bind()方法在Portlet之间进行通信。 使用这种方法,所有通信都将在客户端(浏览器)上进行,无需任何服务器交互。

侦听事件的portlet B应该执行以下操作:

$(document).bind("myevent", function(event, param) {
     // do your work here
     alert("message recieved with data " + param);
});

触发事件的portlet应执行以下操作:

$(document).trigger("myevent", "mydata");

如果Portlet B不需要执行服务器端逻辑,那么您可以简单地在客户端上使用pub / sub并让Portlet B监听Portlet A将发布的特定事件。

所以流程是:

  1. Inital HTML页面将发送到客户端,Portlet A和Portlet B打开。
  2. 发布/订阅系统在客户端初始化。 也许使用像amplifyjs这样的东西
  3. 客户端上的Portlet B注册名为“MyDataUpdated”的主题(或者您要为主题提供的任何有意义的名称)。
  4. 客户端通过XHR触发对Portlet A的serveResource调用。
  5. 服务器上的Portlet A为serveResource调用执行逻辑。
  6. 服务器上的Portlet A将其响应发送回客户端。
  7. 客户端上的Portlet A使用serveResource响应并使用主题“MyDataUpdated”发布结果。
  8. 客户端上的Portlet B收到“MyDataUpdated”事件的通知。
  9. 客户端上的Portlet B可以自行刷新。

以这种方式使用pub / sub将portlet相互分离。 如果Portlet A不存在,则Portlet B不会中断。 如果Portlet B不存在,则Portlet A不会中断。

如果Portlet C出现并且能够获取MyData,这个portlet也可以开始发布“MyDataUpdated”事件,Portlet B也将开始获取这些事件。 它免费获得新的更新!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM