レンダリングされるデータの量が原因で、一部のデータ項目の表示に時間がかかる JSF サイトがあります。
ボタンのクリック時に BlockUI などを使用して、アクションまたは AJAX の実行中に待機中のメッセージを表示する方法を知っています。
ただし、URLを直接入力してページに移動したときに、同様に何かをトリガーする方法がわかりません。onload または onready イベントを使用すると、ページを表示する直前にメッセージがほとんど点滅しません。
何か案は?
レンダリングされるデータの量が原因で、一部のデータ項目の表示に時間がかかる JSF サイトがあります。
ボタンのクリック時に BlockUI などを使用して、アクションまたは AJAX の実行中に待機中のメッセージを表示する方法を知っています。
ただし、URLを直接入力してページに移動したときに、同様に何かをトリガーする方法がわかりません。onload または onready イベントを使用すると、ページを表示する直前にメッセージがほとんど点滅しません。
何か案は?
あなたに関するコードを提供しなかったため
When I use onload or onready events it barely flashes the message right before displaying the page.
あなたはそれを正しくやったと思います。このソリューションはどうですか?クライアントがサーバーにクエリを実行している間、サーバーはバッキング Bean で何らかの処理を実行しますか?
サーバ側:
@YourScope (> @RequestScope)
@ManagedBean
public class MyBean {
private boolean renderDone = false;
@PostConstruct
public void renderLotOfData() {
renderDone = false;
// do something which takes a long time here
renderDone = true;
}
public boolean isRenderDone() {
return this.renderDone;
}
}
クライアント側:
showMySplash(); // initial call
function renderDoneBlockUi() {
var renderDone = $('#renderDone').val();
if (renderDone) {
hideMySplash();
} else {
setTimeout(checkRenderDone, 1000);
}
}
<h:inputHidden value="#{myBean.renderDone}" id="renderDone" />
<p:remoteCommand name="checkRenderDone" update="renderDone" actionListener="#{myBean.renderDone}" autoRun="true" oncomplete="renderDoneBlockUi" />
参考文献