ネストされた複合コンポーネントを ajax 化するのに問題があります。私は以下の方法でそれらを使用しています。(私は可能な限り例を減らそうとしました!)
基本複合コンポーネントbase.xhtml
<composite:interface>
<composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:form:submit" default="true"/>
</composite:interface>
<composite:implementation>
<h:form id="form">
// ... some basic content
<h:commandButton type="submit" id="submit" value="update"/>
</h:form>
</composite:implementation>
最初の複合コンポーネントを再利用する複合コンポーネントreuse.xhtml
<composite:interface>
<composite:clientBehavior name="update" event="update" targets="#{cc.clientId}:test" default="true"/>
</composite:interface>
<composite:implementation>
<my:base id="test">
<composite:insertChildren />
</my:base>
</composite:implementation>
これらのコンポーネントの使用
// Ajax works and method "void update(javax.faces.event.AjaxBehaviorEvent)" is exeuted
<my:base>
<f:ajax event="update" listener="#{controller.update}" render=":some-components"/>
</my:base>
// Ajax doesn't work, so nothing is executed, page reloads according to form submit
<my:reuse>
<f:ajax event="update" listener="#{controller.update}" render=":some-components" />
</my:reuse>
基本コンポーネント内で commandButton を ajaxify するreuse.xhtml
ためにどのターゲットを使用する必要があるのか 、どのイベントを使用する必要があるのか わからないため、私の問題は主に内部にあります。また、 の宣言内<composite:clientBehavior targets="???">
で基本コンポーネント内の commandButton をターゲットにしようとしましたが、成功しませんでした。<composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:test:form:submit" default="true"/>
reuse.xhtml