Diferencia entre revisiones de «Eventos De JSR 286»
Línea 68: | Línea 68: | ||
− | ==== | + | ==== Declaración de publicación de eventos ==== |
− | Para publicar eventos la sección que define a cada portlet debe especificar que eventos puede | + | Para publicar eventos la sección que define a cada portlet debe especificar que eventos puede publicar dicho portlet. |
<code xml> | <code xml> | ||
Línea 79: | Línea 79: | ||
<portlet> | <portlet> | ||
... | ... | ||
− | < | + | <supported-publishing-event> |
+ | <name>eventoX</name> | ||
+ | </supported-publishing-event> | ||
+ | ... | ||
</portlet> | </portlet> | ||
Línea 100: | Línea 103: | ||
<portlet> | <portlet> | ||
... | ... | ||
− | < | + | <supported-processing-event> |
+ | <name>eventoX</name> | ||
+ | </supported-processing-event> | ||
+ | ... | ||
</portlet> | </portlet> | ||
Línea 111: | Línea 117: | ||
=== Publicación de eventos === | === Publicación de eventos === | ||
− | + | ==== desde un Portlet ==== | |
+ | Para publicar un evento desde un portlet se utiliza el método setEvent de la clase ActionResposne o de la clase EventResponse. Instancias de estas clases se consiguen como parámetro del método processAction o processEvent. | ||
+ | |||
+ | Este método recibe dos parámetros, un String como identificación del evento y un Serializable como carga o payload del evento. | ||
+ | |||
+ | <code java> | ||
+ | public class FooBarPortlet extends GenericPortlet { | ||
+ | ... | ||
+ | @ProcessAction(name = "unSubmit") | ||
+ | public void procesarUnSubmit(ActionRequest request, ActionResponse response) { | ||
+ | ... | ||
+ | response.setEvent("eventoX", payload); | ||
+ | ... | ||
+ | } | ||
+ | ... | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ==== con JSF desde un backing bean ==== | ||
+ | Para publicar un evento desde un backing bean de JSF es necesario conseguir primero el objeto ActionResponse correspondiente: | ||
+ | |||
+ | <code java> | ||
+ | public class FooBarBackingBean { | ||
+ | ... | ||
+ | public void unaAccionDeJsf() { | ||
+ | ExternalContext externalContext = | ||
+ | FacesContext.getCurrentInstance().getExternalContext(); | ||
+ | ActionResponse response = ( | ||
+ | ActionResponse) externalContext.getResponse(); | ||
+ | response.setEvent("eventoX", payload); | ||
+ | } | ||
+ | ... | ||
+ | } | ||
=== Procesamiento de eventos === | === Procesamiento de eventos === | ||
+ | ==== desde un Portlet ==== | ||
+ | blah. | ||
+ | |||
+ | |||
+ | ==== con JSF desde un backing bean ==== | ||
blah. | blah. | ||
Revisión del 18:51 25 mar 2009
La versión 2.0 de la especificación de Portlets (JSR 286) define dos mecanismos para la Intercomunicación Entre Portlets. Uno de ellos es a través de la publicación y suscripción de eventos.
Para implementar este mecanismo se agrega una nueva fase entra las ya existentes de "Process Action" y "Render" llamada "Process Events".
Los portlets podrán publicar eventos durante las fases de "Process Action" y "Process Events" y el portal será el encargado de recibir los eventos publicados y redistribuirlos a los portles suscriptos.
Los portles recibirán los eventos durante la fase de "Process Events" pudiendo publicar nuevos eventos. Terminada la fase de "Process Events" no se permite publicar nuevos eventos y comienza la fase de "Render".
Contenido
Configuración de eventos
Todo lo relativo a los eventos debe configurarse en el archivo portlet.xml. Aqui se definirán tres cosas:
- Los eventos
- Los eventos que un portlet puede publicar
- Los eventos que un portlet va a recibir
Eventos
Los eventos se definen a través de un nombre:
<portlet-app>
...
<portlet> ... </portlet>
...
<event-definition> <name>eventoY</name> </event-definition>
<event-definition> <name>eventoX</name> </event-definition>
...
<portlet-app>
o de un namespace y un nombre:
<portlet-app>
...
<portlet> ... </portlet>
...
<event-definition> <qname>foo:eventoX</qname> </event-definition>
<event-definition> <qname>foo:eventoY</qname> </event-definition>
...
Declaración de publicación de eventos
Para publicar eventos la sección que define a cada portlet debe especificar que eventos puede publicar dicho portlet.
<portlet-app>
...
<portlet> ... <supported-publishing-event> <name>eventoX</name> </supported-publishing-event> ... </portlet>
...
</portlet-app>
Suscripción a Eventos
Para recibir la sección que define al portlet debe especificar a que eventos se va a suscribir dicho portlet.
<portlet-app>
...
<portlet> ... <supported-processing-event> <name>eventoX</name> </supported-processing-event> ... </portlet>
...
</portlet-app>
Publicación de eventos
desde un Portlet
Para publicar un evento desde un portlet se utiliza el método setEvent de la clase ActionResposne o de la clase EventResponse. Instancias de estas clases se consiguen como parámetro del método processAction o processEvent.
Este método recibe dos parámetros, un String como identificación del evento y un Serializable como carga o payload del evento.
public class FooBarPortlet extends GenericPortlet {
... @ProcessAction(name = "unSubmit") public void procesarUnSubmit(ActionRequest request, ActionResponse response) { ... response.setEvent("eventoX", payload); ... } ...
}
con JSF desde un backing bean
Para publicar un evento desde un backing bean de JSF es necesario conseguir primero el objeto ActionResponse correspondiente:
public class FooBarBackingBean {
... public void unaAccionDeJsf() { ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); ActionResponse response = ( ActionResponse) externalContext.getResponse(); response.setEvent("eventoX", payload); } ...
}
Procesamiento de eventos
desde un Portlet
blah.
con JSF desde un backing bean
blah.
Ver también
- Inter Portlet Communication
- JSR 286 - Java Portlet Specification V2.0
- Portlet Con JSF
- JSF Portlet Bridge