Возможен ли AJAX для связи между портлетами?

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

Мой вопрос: можно ли выполнить вызов AJAX в портлете A и вместо этого как-то нацелить и динамически обновлять портлет B?

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


person Mark Logan    schedule 01.03.2011    source источник
comment
ищу то же самое ... ты нашел способ?   -  person    schedule 02.09.2011


Ответы (2)


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

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

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

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

$(document).trigger("myevent", "mydata");
person Hasith    schedule 03.07.2012

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

Итак, поток:

  1. Начальная HTML-страница отправляется клиенту с включенными портлетами A и B.
  2. Система Pub / Sub инициализируется на клиенте. Можно использовать что-нибудь вроде 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 также начнет получать эти события. Он получает новые обновления бесплатно!

person Paul Grime    schedule 09.09.2011
comment
Не могли бы вы предоставить какой-нибудь учебник или ресурс с советами, если у вас есть. Спасибо - person Scorpion; 21.02.2012