GWT RPC范围问题

时间:2011-10-10 21:54:30

标签: gwt rpc gwt-rpc

我在保存RPC结果时遇到问题。基本上调用是成功的,但是当我尝试将其保存在变量中时,它似乎超出了范围。

private String userName = "default";

authService.retrieveUserData(new AsyncCallback<UserData>() {
        @Override
        public void onSuccess(UserData result) {
            userName = result.getUserName();
            shell.setError("The userName is " + userName + "!");
        }
        @Override
        public void onFailure(Throwable caught) {
            //I've checked and it is not failing.
        }
    });

shell.getLoginWidget().setUserName(userName);

shell是一个添加到我的RootLayoutPanel的Composite。它包含一个DivElement,其中InnerText由shell.setError(String)设置。 shell还有一个带有SpanElement的LoginWidget,其内部文本由shell.getLoginWidget()。setUserName(String)设置。 userName显然是一个初始化为“default”的String。

问题是shell.setError(“用户名是”+ userName +“!”); (在AsyncCallback内部)将InnerText设置为当前登录的任何人。但是shell.getLoginWidget()。setUserName(userName); (在AsyncCallback之外)将InnerText设置为“default”。

我尝试了很多不同的东西,它们似乎都有相同的范围问题。令我困惑的是this示例显示了几乎完全相同的保存RPC结果的技术。

1 个答案:

答案 0 :(得分:1)

GWT RPC方法是asynchronous - 它们的返回值不能立即获得。您发布的代码的控制流程如下:

  1. userName设为“默认”。
  2. authService询问UserData。这会触发`UserData。
  3. 的异步XMLHttpRequest
  4. 将登录窗口小部件中的userName设置为当前值userName,即“默认”。
  5. 一段时间后,在步骤2中启动的异步请求将返回userName变量将被设置为返回值。
  6. 正确的做法是在onSuccess的{​​{1}}方法中设置用户名:

    AsyncCallback