0

UIを初期化し、すべての要素をVerticalPanelに追加し、初期化の最後に、ユーザーパスワードの有効期限が切れているかどうかを確認します。有効期限が切れている場合は、警告付きのダイアログボックスを表示します。

このページの要素の1つは、DataGridを備えたTabPanelであり、すべてのデータはサーバーから非同期に取得されます。したがって、問題は、[パスワードの有効期限]ダイアログボックスが表示されたときに、DataGridの行の後ろにあることです。Chromeで要素を調べると、PopupGlassPanel-> DialogBox-> Table(コンテンツ付き)があることがわかります。ただし、画像は次のようになります。テーブル(コンテンツ付き)->PopupGlassPanel->DialogBox。

しかし、データを取得するためのサーバーへの非同期呼び出しでは何もできません。すべてのデータがサーバーから取得され、その後にのみダイヤロボックスが表示されるように、そのようなことを制御することは可能ですか?

初期化方法は次のようになります。

public void initUI() {
    final VerticalPanel mainPanel = new VerticalPanel();

    Panel outer = new VerticalPanel();
    DataHolder dataHolder = new DataHolder(); //this class contains DataGrid and makes async calls to server for data
    outer.add(dataHolder.getContent());
    tabPanel.add(outer, "Important Data", true);

    mainPanel.add(tabPanel);

    checkPasswordExpiration(getPwdExpiring());

    RootPanel.get().add(mainPanel);
}

//...........

private void checkPasswordExpiration(int days) {
//...
//Show dialog box
//...
}
4

1 に答える 1

1

checkPasswordExpiration()非同期呼び出しが戻った後に呼び出す必要があります。これを行うには、非同期コールバック(onSuccess())を取得して、呼び出すハンドラーがあるイベントを発生させる必要があります。これをcheckPasswordExpiration(getPwdExpiring());使用EventBusして、イベントを発生させ、ハンドラーを追加できます。

于 2013-02-13T16:52:15.243 に答える