2016-10-06 153 views
0

我有一個簡單的表[表格:TabView的:remTNtableID],用繩子CFSnumbers的列表,當我點擊一個按鈕,我叫getTelephoneNumbers()來填補它,這需要一段時間。RequestContext.getCurrentInstance()更新不會立即渲染

我希望在等待的時候顯示「Loading ..」,爲此我清除了列表,並在列表中添加了「Loading ..」,並調用了RequestContext.getCurrentInstance()。update 「形式:TabView的:remTNtableID」)。

但是表格沒有立即更新,沒有看到「Loading ..」,只有當getTelephoneNumbers()調用結束時表格纔會更新。

這是怎麼回事?我如何強制表格立即重新渲染?

private List<String> CFSnumbers; 

@PostConstruct 
public void init() throws GuiException { 
    CFSnumbers = new ArrayList<String>(); 
} 

public void getTelephoneNumbers() throws GuiException { 
    CFSnumbers.clear(); 
    CFSnumbers.add("Loading.."); 
    RequestContext.getCurrentInstance().update("form:tabView:remTNtableID"); 
    try { 
     ... 
     CFSnumbers = ... 
     RequestContext.getCurrentInstance().update("form:tabView:remTNtableID"); 
    } catch (Exception e) { 
     CFSnumbers.clear(); 
     RequestContext.getCurrentInstance().update("form:tabView:remTNtableID"); 
    } 
+0

你有興趣,使你的'Loading'不同的解決方案?!? –

+0

@YagamiLight呃,什麼? 此刻我的表格顯示「沒有記錄」。 我想單擊按鈕時顯示「正在加載..」,然後在我的調用檢索填充表格的數字返回的秒數後,顯示數字列表。 Atm只是從「沒有記錄」開始,停留在「沒有記錄」。幾秒鐘,然後,當通話結束時,顯示數字列表。 – WurmD

+0

請看這篇文章關於AjaxStatus http://stackoverflow.com/questions/39897415/can-use-ajaxstatus-while-the-next-page-is-loading/39897555#39897555 –

回答

0

行動getTelephoneNumbers()是一個單一的請求。當您的方法完全執行時,所有更新都會執行(在響應中發送)。

你可以做的是將你的動作分成復位部分和重載部分。當您點擊按鈕時,請致電重置,重置並更新您的表格,顯示「正在加載...」。重置完成後,使用remoteCommand開始實際的重載,並在完成時更新表。

所以,在你的XHTML:

<p:remoteCommand name="getTelephoneNumbersRemoteCommand" 
       action="#{yourBean.getTelephoneNumbers}" 
       update="remTNtableID"/> 
<p:commandButton ... 
       action="#{yourBean.preGetTelephoneNumbers}" 
       update="remTNtableID" 
       oncomplete="getTelephoneNumbersRemoteCommand()"/> 

而且在你的bean:從你的bean

public void preGetTelephoneNumbers() { 
    CFSnumbers.clear(); 
    CFSnumbers.add("Loading.."); 
} 

public void getTelephoneNumbers() { 
    try { 
     ... 
     CFSnumbers = ... 
    } catch (Exception e) { 
     CFSnumbers.clear(); 
    } 
} 

更新不再是必要的,因爲它是在XHTML完成。

相關: