Prime Faces (JSF UI ライブラリ) を使用しています。
ページ A からページ B に移動したいのですが、ページ B が遅いため何らかの進行状況インジケーターを使用すると、読み込みに時間がかかります。
どうすればいいですか?
これは、ページBにAJAXロードを追加することで実行できます。ページBには、次のようなものがあります。
<h:head>
<script type="text/javascript">
function onLoadCallback(data) {
if (data.status == "begin") {
dialogWidget.show();
} else {
dialogWidget.hide();
}
}
</script>
</h:head>
<h:body>
<f:ajax event="load" listener="#{bean.onload}" onevent="onLoadCallback" render=":include1"/>
<h:panelGroup id="include1">
<h:panelGroup id="include2" rendered="#{bean.loaded}">
<ui:include src="realPageB.xhtml"/>
</h:panelGroup>
</h:panelGroup>
<p:dialogid="dialog" widgetVar="dialogWidget" modal="true">
Loading
</p:dialog>
</h:body>
これを使用して、最初にAJAXを使用してページのみをロードし(高速です)、実際のページをグループ化するパネルを更新するメソッドを呼び出しました。ロード中にモーダルダイアログが表示さp:ajaxStatus
れます(実験することもできます)。Beanでは、initaliloaded
はfalseであり、メソッドが呼び出された後、trueonload
に更新します。loaded
private loaded;
// getters and setters
public void onload(AjaxBehaviourEvent event) {
loaded = true;
}