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调用后的流程?的主要内容,如果未能解决你的问题,请参考以下文章