GWT中RPC调用后的流程?

Posted

技术标签:

【中文标题】GWT中RPC调用后的流程?【英文标题】:Flow after RPC call in GWT? 【发布时间】: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

【问题讨论】:

【参考方案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();

以上是关于GWT中RPC调用后的流程?的主要内容,如果未能解决你的问题,请参考以下文章

GWT:在另一个模块中调用 RPC 服务

来自 GWT 的 RPC 调用中的异常

RPC 调用期间 GWT 冻结

GWT Java rpc 调用工作;但是,替换 GWTBootstrap - rpc 调用不起作用

GWT 反序列化 RPC 调用中的泛型列表

运行时异常后 GWT RPC 调用不回滚事务