3

レンダリングされるデータの量が原因で、一部のデータ項目の表示に時間がかかる JSF サイトがあります。

ボタンのクリック時に BlockUI などを使用して、アクションまたは AJAX の実行中に待機中のメッセージを表示する方法を知っています。

ただし、URLを直接入力してページに移動したときに、同様に何かをトリガーする方法がわかりません。onload または onready イベントを使用すると、ページを表示する直前にメッセージがほとんど点滅しません。

何か案は?

4

1 に答える 1

2

あなたに関するコードを提供しなかったため

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" />

参考文献

于 2014-07-08T06:02:22.413 に答える