ユーザーがそのタブを選択するたびに、特定のタブの内容を更新したいタブビューがあります。また、タブの更新中にモーダル ダイアログがポップアップするようにします。
これは、tabChange ajax イベント ハンドラーを使用した tabView です。
<p:dialog widgetVar="statusDialog" modal="true" draggable="false" minimizable="false" appendToBody="true" closable="false" header="Processing..." resizable="false" maximizable="false">
<p:graphicImage library="assets" name="ajax-loader.gif"></p:graphicImage>
</p:dialog>
<p:tabView id="tabview" orientation="top" dynamic="false">
<p:ajax event="tabChange" listener="#{bean.tabChangeListener}"></p:ajax>
<p:tab title="tab1">
<ui:include src="/WEB-INF/views/tab1.xhtml"/>
</p:tab>
<p:tab title="tab2">
<p:remoteCommand actionListener="#{bean.refreshData}" update="someTab2ElementID" name="refresh" global="true" onstart="statusDialog.show()" oncomplete="statusDialog.hide()"/>
<ui:include src="/WEB-INF/views/tab2.xhtml"/>
</p:tab>
</p:tabView>
ここに tabChangeListener があります:
public void tabChangeListener(TabChangeEvent event) {
if ( event.getTab().getId().equalsIgnoreCase("tab2") ) {
RequestContext.getCurrentInstance().execute("refresh()");
}
}
refresh remoteCommand が期待どおりに呼び出されていますが、statusDialog が表示されません。同じ remoteCommand がボタン クリックによってトリガーされると、statusDialog が表示されます。JavaScript コンソールにエラーはありません。
remoteCommand が RequestContext.execute() によってトリガーされたときに statusDialog が表示されないのはなぜですか? また、表示するにはどうすればよいですか? statusDialog.show() を execute() に追加しようとしましたが、役に立ちませんでした。