0

ajaxify 複合コンポーネントに従って多くのエントリを読み、私の間違いを見つけることができなかった場合、ajax リクエストが送信されません。たぶん、他の誰かがそれを見つけることができました。

宣言する複合コンポーネントはcomponent.xhtml次のようになります

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:composite="http://java.sun.com/jsf/composite"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">

<composite:interface componentType="myComponentType">
    <composite:attribute name="ajaxListener" method-signature="void listener(javax.faces.event.AjaxBehaviorEvent)" required="false"/>
    <composite:clientBehavior name="update" event="click" targets="#{cc.clientId}:submit"/>
</composite:interface>

<composite:implementation>
    <h:form id="form" prependId="false">
        <h:panelGroup layout="block" id="#{cc.clientId}-body">
            <h:commandButton type="submit" id="submit" value="Send"/>
        </h:panelGroup>
    </h:form>
</composite:implementation>

</html>

そして、このコンポーネントを次のように使用します

<h:panelGroup id="viewport" layout="block" binding="#{controller.viewport}">
    ... 
    <c:forEach items="#{controller.elements}" var="element">

        <my:component id="#{element.id}">
            <f:ajax event="update" listener="#{controller.update}" render="@form"/>
        </my:component>

        ... rendering some different components by element.type what requires JSTL c:forEach/c:if

    </c:forEach>
</h:panelGroup>

submit私の具体的な問題は、ボタンをクリックしてもページがリロードされたときに FireBug が ajax リクエストをキャッチしないことです。そのため、ajax イベントが送信ボタンに正しくバインドされていませんでした。

初めてf:ajax複合コンポーネント内で宣言してこれを試しました。したがって、属性を使用しますajaxListener。これは機能しますがupdate、署名付きのメソッドvoid update(AjaxBehaviorEvent e)はトリガーされません。

うまくいけば、誰でも間違いを特定できます!


アップデート

私の問題はh:panelGroup、JSTL タグc:forEachとを使用して 内で複合コンポーネントをレンダリングする方法ですc:if。これらのタグを省略して静的複合コンポーネントを挿入すると、ajaxListener-attribute 内のリスナー メソッドがトリガーされ、ajax リクエストが正しく送信されます。上記の方法はとにかく機能しません。

リビジョン 2 を更新

おそらく、ajax リスナーが正しくバインドされない理由を説明できる人はいるでしょうか?!

前もって感謝します!

4

0 に答える 0