2011-03-01 30 views
6

Sé que puede crear portlets que pueden actualizar su contenido sin actualizar toda la página del portal simplemente utilizando la etiqueta JSR286 resourceURL y haciendo una llamada AJAX.¿Es posible la comunicación entre portlets con AJAX?

Mi pregunta es, ¿es posible hacer una llamada AJAX en el portlet A y, de alguna manera, orientar y actualizar dinámicamente el portlet B en su lugar?

La idea es evitar la actualización de página del portal (re-renderización) cuando se realiza una comunicación entre portlets a través de actionURL o eventos.

+0

la búsqueda de la misma ... lo hizo ¿encuentras alguna manera? –

Respuesta

0

Si el portlet B no necesita realizar una lógica del lado del servidor, entonces simplemente podría usar pub/sub en el cliente y hacer que el portlet B escuche un evento particular que el portlet A publicará.

Así flujo es:

  1. página HTML Inital se envía al cliente, con portlets A y B en portlets.
  2. Pub/sub sistema se inicializa en el cliente. Tal vez usar algo como amplifyjs.
  3. El portlet B en el cliente se registra para un tema llamado "MyDataUpdated" (o cualquier nombre significativo que quiera darle al tema).
  4. El cliente desencadena una llamada de serveResource al portlet A a través de XHR.
  5. El portlet A en el servidor hace la lógica para la llamada serveResource.
  6. El portlet A en el servidor envía su respuesta de vuelta al cliente.
  7. El portlet A en el cliente consume la respuesta serveResource y publica el resultado utilizando el tema "MyDataUpdated".
  8. El portlet B en el cliente recibe una notificación del evento "MyDataUpdated".
  9. El portlet B en el cliente puede actualizarse.

El uso de pub/sub de esta manera desacopla los portlets entre sí. Si el portlet A no existe, el portlet B no se rompe. Si el portlet B no existe, el portlet A no se rompe.

Y si portlets C viene y también es capaz de adquirir MyData, este portlet podría también comenzar a publicar eventos "MyDataUpdated", y portlets B comenzará a obtener estos eventos también. ¡Recibe las nuevas actualizaciones gratis!

+1

¿Puede proporcionar amablemente algún recurso tutorial o consejos si tiene. Gracias – Scorpion

1

Puede usar los métodos jQuery trigger() y bind() para comunicarse entre portlets. Con este enfoque, todas las comunicaciones se realizarán en el lado del cliente (navegador) sin ninguna interacción con el servidor.

El portlet B que escucha el evento debe hacer algo como:

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

El portlet A que desencadena el evento debe hacer lo siguiente:

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