JSF 2 - Как добавить метод прослушивателя Ajax к интерфейсу составного компонента?

У меня есть составной компонент JSF 2, который использует некоторое поведение Ajax. Я хочу добавить метод listener в тег внутри моего составного компонента, но метод listener должен быть предоставлен как <композитный: атрибут> в <композитный: интерфейс> .

Тег внутри моего составного компонента в настоящее время жестко закодирован для прослушивателя вот так:

<f:ajax
    event="valueChange"
    execute="@this"
    listener="#{controller.genericAjaxEventLogger}"
    render="#{cc.attrs.ajaxRenderTargets}" />

Метод слушателя в bean-компоненте имеет следующую сигнатуру:

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...
}
20
задан BalusC 26 October 2011 в 14:37
поделиться