2013-06-05 150 views
3

我有一个JSF网站,其中一些数据项需要一段时间才能显示,因为正在渲染的数据量很大。正在呈现JSF页面时显示加载/启动画面?

我知道如何在按钮点击时使用像BlockUI这样的东西,以在执行动作或AJAX时显示等待消息。

但是,我无法弄清楚如何直接键入URL并转到页面时如何触发相似的东西。当我使用onload或onready事件时,在显示页面之前几乎没有闪烁消息。

任何想法?

回答

2

因为你没有向客户提供任何代码的

When I use onload or onready events it barely flashes the message right before displaying the page. 

我认为你正确地做到了。这个解决方案呢?服务器在后台bean中执行一些处理,而客户端查询服务器'他是否完成'?

Serverside集团:

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

参考