2016-10-06 6 views
0

私はシンプルなテーブル[フォーム:tabView:remTNtableID]を文字列リストCFSnumbersで作成し、ボタンをクリックするとgetTelephoneNumbers()と呼びます。 。RequestContext.getCurrentInstance()。更新がすぐにレンダリングされない

私は待っている間にテーブルの "Loading .."を表示させたいので、リストをクリアして、リストに "Loading .."を追加し、RequestContext.getCurrentInstance()を呼び出しました。 "form:tabView:remTNtableID")。

テーブルはすぐには更新されません。「ロード中」は表示されず、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 uuh、何? 私のテーブルが空になると、 "No records"と表示されます。 ボタンをクリックして「読み込み中」と表示したいときは、テーブルを埋める番号を取得するための呼び出しが返されてから数秒後に番号のリストが表示されます。 これは「No records。」から始まり、「No records」にとどまります。数秒間、そして呼が終了すると、番号のリストが表示されます。 – WurmD

+0

この記事を参照してくださいAjaxStatus http://stackoverflow.com/questions/39897415/can-use-ajaxstatus-while-the-next-page-is-loading/39897555#39897555 –

答えて

0

アクションgetTelephoneNumbers()は1回のリクエストです。メソッドが完全に実行されると、すべての更新が実行されます(応答を送信します)。

あなたのできることは、リセット部分と重いローディング部分に分けられます。ボタンをクリックすると、 "Loading ..."という表をリセットして更新するresetを呼び出します。リセットが完了したら、remoteCommandを使用して実際の過負荷を開始し、完了したらテーブルを更新します。

だから、あなたのXHTMLで:

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

そして、あなたの豆で:それはXHTMLで行われるようにBeanから

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

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

更新、もはや必要ではありません。

関連:

関連する問題