AJAX 是否可以用于 Portlet 间通信?
我知道您可以创建可刷新其内容的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果 Portlet B 不需要执行服务器端逻辑,那么您可以简单地在客户端上使用 pub/sub 并让 Portlet B 侦听 Portlet A 将发布的特定事件。
因此流程是:
以这种方式使用 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:
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!
您可以使用 jQuery的trigger() 和bind() 方法在portlet 之间进行通信。通过这种方法,所有通信都将在客户端(浏览器)上进行,无需任何服务器交互。
侦听事件的 Portlet B 应该执行如下操作:
触发事件的 Portlet A 应该执行以下操作:
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:
The portlet A that fire the event should do the following: