私は、Ajaxのいくつかの動作を使用するJSF 2コンポジットコンポーネントを使用しています。複合コンポーネント内の<f:ajax>
タグにlistener
メソッドを追加しますが、listener
メソッドは<composite:interface>
に<composite:attribute>
として提供する必要があります。JSF 2 - 複合コンポーネント・インターフェースにAjaxリスナー・メソッドを追加するにはどうすればいいですか?
私の複合コンポーネント内<f:ajax>
タグは現在、このようなリスナーにハードコードされている:
<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}" />
どうすればよいですか? SOLUTIONで更新
:
私はBalusCによって提案されたアプローチを取って、それは素晴らしい作品。関連するスニペットは、以下のとおりです。
複合コンポーネントのインターフェイス宣言
<composite:interface>
<composite:attribute
name="myattributeUpdatedEventListener"
method-signature="void listener()"
required="true" />
...
</composite:interface>
私の複合部品
<f:ajax
event="valueChange"
execute="@this"
listener="#{cc.attrs.myattributeUpdatedEventListener}"
render="#{cc.attrs.ajaxRenderTargets}" />
私は複合コンポーネントを使用して、私のページの代わりに、使用Ajaxのタグ
<h:form>
<compcomp:myCompositeComponent
myattributeUpdatedEventListener="#{myBackingBean.updatedEventListenerXYZ}" />
</h:form>
そして、私の裏打ち豆の方法
解決に感謝、それは本当に私を助けます。 –
パラメータでメソッドを渡すことは可能ですか?例のように#{myBackingBean.updatedEventListenerXYZ}を渡すのではなく、#{myBackingBean.myMethod(cc.attrs.myparam)}のようなものを渡してください。 – dcalap