Возможен ли AJAX для связи между портлетами? - PullRequest
6 голосов
/ 01 марта 2011

Я знаю, что вы можете создавать портлеты, которые могут обновлять его содержимое, не обновляя всю страницу портала, просто используя тег resourceURL JSR286 и выполняя вызов AJAX.

У меня вопрос, возможно ли сделатьВызов AJAX в портлете A и как-то нацелить и динамически обновить портлет B?

Идея состоит в том, чтобы избежать обновления (повторного рендеринга) страницы портала, когда вы взаимодействуете между портлетами через actionURL или события.

Ответы [ 2 ]

1 голос
/ 03 июля 2012

Вы можете использовать методы триггера jQuery () и bind () для связи между портлетами. При таком подходе все взаимодействие будет происходить на стороне клиента (в браузере) без какого-либо взаимодействия с сервером.

Портлет B, который прослушивает событие, должен сделать что-то вроде:

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

Портлет A, инициирующий событие, должен выполнить следующее:

$(document).trigger("myevent", "mydata");
0 голосов
/ 10 сентября 2011

Если портлету B не требуется выполнять логику на стороне сервера, вы можете просто использовать pub / sub на клиенте и заставить портлет B прослушивать определенное событие, которое опубликует портлет A.

Итак, потокis:

  1. Начальная HTML-страница отправляется клиенту с включенными портлетом A и портлетом B.
  2. Инициализируется паб / подсистема на клиенте.Возможно, используйте что-то вроде ampifyjs .
  3. Портлет B на клиенте регистрируется для темы под названием «MyDataUpdated» (или для любого значимого имени, которое вы хотите дать теме).
  4. Клиентинициирует вызов serveResource к портлету A через XHR.
  5. Портлет A на сервере выполняет логику для вызова serveResource.
  6. Портлет A на сервере отправляет свой ответ обратно клиенту.
  7. Портлет A на клиенте использует ответ serveResource и публикует результат, используя тему «MyDataUpdated».
  8. Портлет B на клиенте получает уведомление о событии «MyDataUpdated».
  9. ПортлетB на клиенте может обновиться сам.

Использование таким образом pub / sub позволяет отделить портлеты друг от друга.Если портлет A не существует, портлет B не прерывается.Если портлет B не существует, портлет A не ломается.

И если портлет C приходит вместе и также способен получать MyData, этот портлет может также запускатьсяпубликация событий «MyDataUpdated», и портлет B также начнет получать эти события.Он получает новые обновления бесплатно!

...