2013-06-05 192 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" /> 

參考