0

我初始化 UI,将所有元素添加到 VerticalPanel,并在初始化结束时检查用户密码是否过期。如果它即将到期,我会显示一个带有警告的对话框。

此页面的元素之一是带有 DataGrid 的 TabPanel,所有数据都是从服务器异步获取的。所以问题是,当密码过期对话框出现时,它位于 DataGrid 行的后面。当我在 Chrome 中检查元素时,我看到有 PopupGlassPanel -> DialogBox -> Table (with content)。但图片应该是:表格(有内容)-> 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 回答