GWT新手在这里,我正在尝试了解使用RPC时GWT的原理。假设我有onModuleLoad()
,并且有一个登录页面(用户名和密码)。因此,当用户单击提交时,它会调用new ClickHandler()
并说我需要执行以下操作:
验证用户(pw和用户名有效)
记录条目
将用户添加到会话
问题:
我是否需要为AsyncCallback
以上的每一项写东西?
客户端上的每个操作是否都应具有带有AsyncCallback
和onFailure
的onSuccess
?编码不是太多(与struts相比)?
因此,现在我的代码看起来像这样,它在onSuccess
中嵌套了2个AsyncCallback,这是一个大问题,因为在将消息放置在屏幕上以供最终使用之后,SessionService的执行才开始。
MongoDBServiceAsync mongoDBServiceAsync = GWT.create(MongoDBService.class);
ServiceDefTarget serviceDef = (ServiceDefTarget) mongoDBServiceAsync;
serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()+ "dbservice");
try{
mongoDBServiceAsync.isValidUser(user, new AsyncCallback<User>(){
@Override
public void onFailure(Throwable caught)
{
//show error to user
}
@Override
public void onSuccess(User userDB)
{
SessionService.Util.getInstance().addUserToSession(userDB, new AsyncCallback<Void>(){ //yet another AsyncCallback
@Override
public void onFailure(Throwable caught)
{
//something went wrong
}
@Override
public void onSuccess(Void result)
{
//add user to session
// problem - this can be executed AFTER I wrote on screen: Hello USER_NAME
}});
}
});
最佳答案
asynccallback
对于每个GWT RPC调用都是必需的。这使我们能够根据服务器管理用户的操作。
谈到您的实际问题,您需要嵌套多个RPC。只需修改您的isValidUser
服务器端实现,使其也可以将用户添加到会话中。
User isValidUser(User user) {
//validate user with DB
//if valid, add to session
return user
}
关于java - GWT使用AsyncCallback;代码管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32250545/