GWT新手在这里,我试图在使用RPC时理解GWT的理念。所以说我有onModuleLoad()
并且有一个登录页面(用户名和密码)。因此,当用户点击提交时,它会调用new ClickHandler()
并说我需要执行以下操作:
问题:
AsyncCallback
以上的每个项目撰写? AsyncCallback
onFailure
和onSuccess
吗?是不是编码太多了(与struts相比?)所以目前我的代码看起来像这样,它有2个嵌套在onSuccess
中的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
}});
}
});
答案 0 :(得分:0)
每个GWT RPC调用都需要asynccallback
。我们可以根据服务器管理用户的操作。
为了解决您的实际问题,您需要嵌套多个RPC。只需改进你的isValidUser
服务器端实现,这样它也可以将用户添加到会话中。
User isValidUser(User user) {
//validate user with DB
//if valid, add to session
return user
}