Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GWT异步回调的使用;代码管理_Java_Gwt_Asynccallback - Fatal编程技术网

Java GWT异步回调的使用;代码管理

Java GWT异步回调的使用;代码管理,java,gwt,asynccallback,Java,Gwt,Asynccallback,这里是GWT新手,我试图理解使用RPC时GWT的原理。假设我有onModuleLoad(),并且有一个登录页面(用户名和密码)。因此,当用户单击submit时,它会调用new ClickHandler(),并说我需要执行以下操作: 验证用户身份(密码和用户名有效) 记录条目 将用户添加到会话 问题: 我是否需要为上面的每个项目编写AsyncCallback 客户端上的每个操作是否都应该有一个AsyncCallback,带有onFailure和onSuccess?编码不是太多吗(与struts相比

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

  • 验证用户身份(密码和用户名有效)
  • 记录条目
  • 将用户添加到会话
  • 问题:

  • 我是否需要为上面的每个项目编写
    AsyncCallback
  • 客户端上的每个操作是否都应该有一个
    AsyncCallback
    ,带有
    onFailure
    onSuccess
    ?编码不是太多吗(与struts相比?)
  • 因此,目前我的代码看起来是这样的,它在
    onSuccess
    中嵌套了2个异步回调,这是一个大问题,因为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 
                                }});
                        }        
                  });
    
    mongodbservicecasync mongodbservicecasync=GWT.create(MongoDBService.class);
    ServiceDefTarget serviceDef=(ServiceDefTarget)mongoDBServiceAsync;
    serviceDef.setServiceEntryPoint(GWT.getModuleBaseURL()+“dbservice”);
    试一试{
    isValidUser(用户,新的AsyncCallback()){
    @凌驾
    失败时的公共无效(可丢弃)
    {
    //向用户显示错误
    }
    @凌驾
    成功时的公共void(用户userDB)
    {
    SessionService.Util.getInstance().addUserToSession(userDB,新的AsyncCallback(){//还有一个AsyncCallback
    @凌驾
    失败时的公共无效(可丢弃)
    {
    //出了点问题
    }
    @凌驾
    成功时公开作废(作废结果)
    {
    //将用户添加到会话
    //问题-我在屏幕上写下:Hello USER\u NAME后,可以执行此操作
    }});
    }        
    });
    
    对于每个GWT RPC调用,
    异步回调
    都是必需的。也就是说,我们能够根据服务器管理用户的操作

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

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

    asynccallback
    对于每个GWT RPC调用都是必需的。这就是我们能够根据服务器管理用户的操作

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

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

    “验证用户”和“将用户添加到会话”不是反解耦吗?我的意思是,我不想将这两项封装在一起,因为它们是不同的操作。那么,我剩下的是嵌套onSuccess吗?谢谢Suresha!RPC粒度应该相当粗糙(如果只是为了性能),然后在您的RemoteServiceServlet中,您可以自由分解并分派到更细粒度的业务服务。@adhg为什么不简单地创建另一个RPC
    authenticateUser
    用于登录?难道“验证用户”和“将用户添加到会话”不就是反解耦吗?我的意思是,我不想将这两项按原样封装在一起不同的操作。那么,我剩下嵌套的onSuccess了吗?谢谢Suresha!RPC粒度应该相当粗糙(如果只是为了性能),那么在RemoteServiceServlet中,您可以自由分解并分派到更细粒度的业务服务。@adhg为什么不创建另一个RPC
    authenticateUser
    用于登录?