AJAX 是否可以用于 Portlet 间通信?

发布于 2024-10-19 12:42:55 字数 216 浏览 13 评论 0原文

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

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

这个想法是当您通过actionURL 或事件进行Portlet 间通信时,避免who 门户页面刷新(重新呈现)。

I know that you can create portlets that can refresh its content without refreshing the whole portal page by simply using the JSR286 resourceURL tag and doing an AJAX call.

My question is, is it possible to do an AJAX call in Portlet A and somehow target and dynamically update Portlet B instead?

The idea is to avoid the who portal page refresh (re-rendering) when you do inter-portlet communication via actionURL or events.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

简单 2024-10-26 12:42:56

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

因此流程是:

  1. 将初始 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 也将开始获取这些事件。它免费获得新的更新!

If Portlet B does not need to perform server-side logic, then you could simply use pub/sub on the client and have Portlet B listen to a particular event that Portlet A will publish.

So flow is:

  1. Inital HTML page is sent to the client, with Portlet A and Portlet B on.
  2. Pub/sub system is initialised on client. Maybe use something like amplifyjs.
  3. Portlet B on the client registers for topic called "MyDataUpdated" (or whatever meaningful name you want to give the topic).
  4. Client triggers a serveResource call to Portlet A via XHR.
  5. Portlet A on the server does logic for serveResource call.
  6. Portlet A on the server sends its response back to the client.
  7. Portlet A on the client consumes the serveResource response and publishes the result using the topic "MyDataUpdated".
  8. Portlet B on the client receives a notification of the "MyDataUpdated" event.
  9. Portlet B on the client can refresh itself.

Using pub/sub in this way decouples the portlets from each other. If Portlet A does not exist, Portlet B does not break. If Portlet B does not exist, Portlet A does not break.

And if Portlet C comes along and also is capable of acquiring MyData, this portlet could also start publishing "MyDataUpdated" events, and Portlet B will start to get these events too. It gets the new updates for free!

赏烟花じ飞满天 2024-10-26 12:42:55

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

侦听事件的 Portlet B 应该执行如下操作:

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

触发事件的 Portlet A 应该执行以下操作:

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

You may use jQuery trigger() and bind() methods to communicate between portlets. With this approach all communication will happen on clientside (browser) without any server interaction.

The portlet B that listens to the event should do something like:

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

The portlet A that fire the event should do the following:

$(document).trigger("myevent", "mydata");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文