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


验证用户(pw和用户名有效)
记录条目
将用户添加到会话


问题:


我是否需要为AsyncCallback以上的每一项写东西?
客户端上的每个操作是否都应具有带有AsyncCallbackonFailureonSuccess?编码不是太多(与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/

10-09 19:27