JSF 2 - ¿Cómo puedo agregar un método de escucha Ajax a la interfaz de componente compuesto?
Tengo un componente compuesto JSF 2 que emplea un comportamiento Ajax. Quiero agregar unalistener
método para el<f:ajax>
etiqueta dentro de mi componente compuesto, pero lalistener
l método @ debe proporcionarse como<composite:attribute>
en el<composite:interface>
.
Los<f:ajax>
a etiqueta @ dentro de mi componente compuesto está actualmente codificada para un oyente como este:
<f:ajax
event="valueChange"
execute="@this"
listener="#{controller.genericAjaxEventLogger}"
render="#{cc.attrs.ajaxRenderTargets}" />
El método de escucha en el bean tiene esta firma:
public void genericAjaxEventLogger(AjaxBehaviorEvent event)
throws AbortProcessingException {
// implementation code...
}
Quiero que el componente compuesto sea algo así para que la página pueda proporcionar su propio método de evento, pero no puedo entender la sintaxis correcta para la interfaz.
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.ajaxEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
¿Cómo puedo hacer esto
ACTUALIZADO CON SOLUCIÓN:
Tomé el enfoque sugerido por BalusC y funciona muy bien. Los fragmentos relevantes son:
La declaración de interfaz en el componente compuesto
<composite:interface>
<composite:attribute
name="myattributeUpdatedEventListener"
method-signature="void listener()"
required="true" />
...
</composite:interface>
La etiqueta Ajax utilizada en mi componente compuesto
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.myattributeUpdatedEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
El lugar en mi página donde uso el componente compuesto
<h:form>
<compcomp:myCompositeComponent
myattributeUpdatedEventListener="#{myBackingBean.updatedEventListenerXYZ}" />
</h:form>
Y el método en mi bean de respaldo
public void updatedEventListenerXYZ() {
// do something here...
}