GWT使用AsyncCallback;代码管理

时间:2015-08-27 13:20:45

标签: java gwt asynccallback

GWT新手在这里,我试图在使用RPC时理解GWT的理念。所以说我有onModuleLoad()并且有一个登录页面(用户名和密码)。因此,当用户点击提交时,它会调用new ClickHandler()并说我需要执行以下操作:

  1. 验证用户(pw&用户名有效)
  2. 记录条目
  3. 将用户添加到会话
  4. 问题:

    1. 我是否需要为AsyncCallback以上的每个项目撰写?
    2. 客户端的每个操作都应该AsyncCallback onFailureonSuccess吗?是不是编码太多了(与struts相比?)
    3. 所以目前我的代码看起来像这样,它有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 
                                  }});
                          }        
                    });
      

1 个答案:

答案 0 :(得分:0)

每个GWT RPC调用都需要asynccallback。我们可以根据服务器管理用户的操作。

为了解决您的实际问题,您需要嵌套多个RPC。只需改进你的isValidUser服务器端实现,这样它也可以将用户添加到会话中。

User isValidUser(User user) {
//validate user with DB
//if valid, add to session
return user
}