【问题标题】:Flow after RPC call in GWT?GWT中RPC调用后的流程?
【发布时间】:2012-03-19 11:09:55
【问题描述】:
public Class GUi(){
 // More Code

public void onClick(ClickEvent event) {

LoginServer loginServer =new  LoginServer(getTextBoxUsername().getText(),getTextBoxPassword().getText());     
loginServer.setConnection(connection);
connection=loginServer.getConnection();
System.out.println(" connected "+connection);
// More code
}

public class LoginServer {
// more code
public void setConnection(Boolean connection) {

    String[] authentication = {username,password};
    //RPC call
    connectionService.connectionServer(authentication, callbackConnection); 
    System.out.println("setConnection" + connection);
}

public Boolean getConnection() {
    return connection;
}
AsyncCallback callbackConnection = new AsyncCallback() {

    public void onFailure(Throwable caught) {
        // TODO Auto-generated method stub
        connection=false;
    }

    public void onSuccess(Object result) {
        connection=true;
        System.out.println("onSuccess + connection);

    }
};

}

输出

setConnectionnull
connected null
onSuccesstrue

根据我的输出应该是。

 onSuccesstrue
 setConnectiontrue
 connected null

因为我创建了LoginServer ; 的对象然后我调用方法setConnection,其中编写了RPC 调用,它工作得非常好。 OnSucces 将改变连接的值。 然后我调用了方法getConnection

我也不明白为什么connected null

【问题讨论】:

    标签: java gwt gwt-rpc gwt2


    【解决方案1】:

    当/如果你让你的妻子/女朋友给你带啤酒,你问她后的第二秒你手里就没有啤酒了,你可以继续看比赛并做出反应,你没有被屏蔽等待您的啤酒:这称为异步处理。

    同样,connection 在您发送 RPC 调用后仍然是 null

    https://groups.google.com/d/msg/Google-Web-Toolkit/-soVdfMGug8/vRmqIcAZ5zsJ

    【讨论】:

    • :) 很好的解释。上面的链接不是一个好的链接。我的意思是页面没有打开。你能给我一些方法,可以用来等待 asyncCall 完成,然后执行 remining 代码。
    • 我完全理解你的意思。有什么解决办法吗?我想在完成 asyncInterface 执行之前停止我的其他方法。所有其他代码都取决于异步的成功。例如 LoginGui 调用登录类,其中有异步调用。事件成功后,下一页已加载。我无法在 Onsuccess 方法中创建另一个 nextPage 的对象。因为我想分离 GUI 和逻辑部分。
    • 将回调参数添加到您的 setConnection 方法以调用 onSuccess(或者,更简单,将 AsyncCallback 传递给您的方法,直接传递给您的 RPC;或者简单地删除您的LoginServer 并直接使用connectionService)。
    【解决方案2】:
    setConnectionnull
    

    这是因为回调函数是异步执行的。也就是说,在响应从服务器到达浏览器后调用此函数。但是代码的另一部分像

     connection=loginServer.getConnection();
    

    在连接仍为空时立即执行。

    谢谢, 象头神

    【讨论】:

    • 嗨 NewCodeLearner,在 onSuccess 中创建 nextPage 的对象。也就是之前不要初始化。
    • 是的,但有些面板需要setvisible(false); 就像这个if (Boolean.TRUE.equals(connection)) { loginPanel.getParent().getParent().getParent() .setVisible(false);NexPage nexpage = new Nexpage();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多