В какой среде вы тестировали / использовали его? Это не работает для меня на GF 3.1 и Tomcat 7 с Mojarra 2.1.1.
я есть составной компонент JSF 2, который использует некоторое поведение Ajax. Я хочу добавитьlistener
метод к<f:ajax>
тег внутри моего составного компонента, ноlistener
метод должен быть представлен как<composite:attribute>
в<composite:interface>
.
<f:ajax>
тег внутри моего составного компонента в настоящее время жестко запрограммирован для слушателя следующим образом:
<f:ajax
event="valueChange"
execute="@this"
listener="#{controller.genericAjaxEventLogger}"
render="#{cc.attrs.ajaxRenderTargets}" />
У метода слушателя на бине есть эта подпись:
public void genericAjaxEventLogger(AjaxBehaviorEvent event)
throws AbortProcessingException {
// implementation code...
}
Я хочу, чтобы составной компонент был примерно таким, чтобы страница могла предоставлять собственный метод события, но я не могу понять правильный синтаксис для интерфейса.
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.ajaxEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
Как я могу это сделать?
ОБНОВЛЕНО РЕШЕНИЕМ:
Я принял подход, предложенный BalusC, и он отлично работает. Соответствующие фрагменты:
Объявление интерфейса в составном компоненте
<composite:interface>
<composite:attribute
name="myattributeUpdatedEventListener"
method-signature="void listener()"
required="true" />
...
</composite:interface>
Тег Ajax, используемый в моем составном компоненте
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.myattributeUpdatedEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
Место на моей странице, где я использую составной компонент
<h:form>
<compcomp:myCompositeComponent
myattributeUpdatedEventListener="#{myBackingBean.updatedEventListenerXYZ}" />
</h:form>
И метод на моем бобе
public void updatedEventListenerXYZ() {
// do something here...
}