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

时间:2011-03-01 17:11:01

标签: javascript ajax portlet portal

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

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

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

2 个答案:

答案 0 :(得分:1)

您可以使用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");

答案 1 :(得分:0)

如果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可以自行刷新。
  10. 以这种方式使用pub / sub将portlet相互分离。如果Portlet A不存在,则Portlet B不会中断。如果Portlet B不存在,则Portlet A不会中断。

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