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 回答