'dynamic'属性が'true'に設定されているほとんどすべてのPFコンポーネントは、短い遅延(理解できる)の後にのみ表示され、ajaxの開始/停止イベントをトリガーしないことに気付きました。
これは私の(完全に機能している)Ajaxステータスコンポーネントであり、簡潔にするために実際のダイアログの内容は省略されています。
<p:ajaxStatus onstart="statusDialog.show();" onsuccess="statusDialog.hide();" onerror="errorDialog.show();"/>
これは動的にロードされるダイアログです。バッキングBeanからデータを取得する必要があります。
<p:dialog modal="true" widgetVar="confDialog" position="center" id="confD" dynamic="true">
<p:panelGrid>
<p:row>
<p:column>
<h:outputText value="Date"></h:outputText>
</p:column>
<p:column>
<h:outputText value="#{myBean.currentDate}">
<f:convertDateTime locale="#{myBean.currentLanguage}" type="both" dateStyle="full" timeStyle="full" timeZone="#{myBean.currentTimeZone}"></f:convertDateTime>
</h:outputText>
</p:column>
</p:row>
</p:panelGrid>
<p:commandButton value="Close" type="button" onclick="confDialog.hide();">
</p:commandButton>
</p:dialog>
何かを実行し、動的にロードされた確認ダイアログを表示するコマンドボタン:
<p:commandButton value="Do it" type="submit" ajax="true" process="@form"
action="#{bean.processForm}"
oncomplete="if(!args.validationFailed){confDialog.show();}"
update="confD @form"/>
コマンドボタンがデータをバッキングBeanに送信し、データを取得している間、Ajaxステータスダイアログが表示されます。その後、ajaxステータスダイアログが消え、1〜2秒の遅延があり、確認ダイアログが表示されます。
同じことが動的にロードされたタブ(PF tabViewコンポーネント内)でも発生します。
動的コンポーネントのロード中にajaxステータスダイアログが表示されないのはなぜですか?どうすれば見せられますか?
編集:
@partlovのおかげで、動的にロードされたダイアログにJQ ajax start / stopハンドラーを追加することで、PF関数をオーバーライドせずに解決策を見つけました。
jQuery(document).ready(function() {
confDialog.getJQ().ajaxStart(function(){statusDialog.show()});
confDialog.getJQ().ajaxStop(function(){statusDialog.hide()});
});