Tengo un componente compuesto JSF 2 que emplea algún comportamiento Ajax. Deseo agregar un método listener
a la etiqueta <f:ajax>
dentro de mi componente compuesto, pero el método listener
se debe proporcionar como <composite:attribute>
en el <composite:interface>
.JSF 2 - ¿Cómo puedo agregar un método de escucha Ajax a la interfaz compuesta de componentes?
La etiqueta <f:ajax>
dentro de mi componente compuesto está actualmente programado en forma fija a un oyente como esto:
<f:ajax
event="valueChange"
execute="@this"
listener="#{controller.genericAjaxEventLogger}"
render="#{cc.attrs.ajaxRenderTargets}" />
El método detector en el frijol tiene esta firma:
public void genericAjaxEventLogger(AjaxBehaviorEvent event)
throws AbortProcessingException {
// implementation code...
}
Quiero que el compuesto El componente es algo así para que la página pueda proporcionar su propio método de evento, pero no puedo encontrar 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?
actualiza 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 pieza compuesta
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.myattributeUpdatedEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
El lugar en mi página en la que utilizo el componente compuesto
<h:form>
<compcomp:myCompositeComponent
myattributeUpdatedEventListener="#{myBackingBean.updatedEventListenerXYZ}" />
</h:form>
Y el método en mi respaldo Bean
public void updatedEventListenerXYZ() {
// do something here...
}
gracias por la solución, realmente me ayuda. –
¿Es posible hacer eso pasando un método con un parámetro? Es decir, en lugar de pasar # {myBackingBean.updatedEventListenerXYZ} como en el ejemplo, pase algo como # {myBackingBean.myMethod (cc.attrs.myparam)} – dcalap