【问题标题】:GWT request factory - Fire request inside of success method of another requestGWT 请求工厂 - 在另一个请求的成功方法中触发请求
【发布时间】:2013-07-24 04:02:35
【问题描述】:

我正在尝试将两个请求工厂调用相互嵌套。我检索了一个 post 对象,并在成功方法中再次使用相同的对象(仅出于测试目的,对于其他请求,我得到相同的行为,例如持久化)。

问题是:只有第一个请求到达服务器。

我没有收到任何错误消息。如果我调试代码,一切正常,直到第二个请求被触发。然后什么也没有发生。后端的方法没有被调用,前端没有显示错误,即使我为第二个请求的接收者实现了“onFailure”方法。

public class RequestFactoryFindTest extends GWTTestCase{

    /**
     * must refer to a valid module that sources this class.
     */
    public String getModuleName() {
        return "com.Test.MyTest";
    }

    public void test(){
        final ClientFactory clientFactory = GWT.create(ClientFactoryImpl.class);
        final MyRequestFactory requestFactory = clientFactory.getRequestFactory();
        final PostRequest request = requestFactory.postRequest();


        request.findPost(1l).fire(new Receiver<PostProxy>() {

            @Override
            public void onSuccess(PostProxy response) {


                final ClientFactory clientFactory = GWT.create(ClientFactoryImpl.class);
                final MyRequestFactory requestFactory = clientFactory.getRequestFactory();
                final PostRequest request = requestFactory.postRequest();

                System.out.println("outer success");

                request.findPost(1l).fire(new Receiver<PostProxy>() {

                    @Override
                    public void onSuccess(PostProxy response) {
                        System.out.println("inner success");

                    }

                });

            }
        });


    }
}

谁能解释一下?

编辑:

我尝试了很多东西,比如在事件总线上触发事件、捕获事件并在那里执行我的内部请求工厂调用。但没有任何效果。我认为这是 GWTTestcase 与 RequestFactory 结合的一些问题。 我也改变了我的代码,所以我只使用了一个 clientFactory。

【问题讨论】:

  • 我无法解释,但我可以告诉你,你应该只为你的整个应用程序创建一个MyRequestFactory。您可能也应该为ClientFactory 这样做。
  • 试过了,但没有任何改变

标签: java gwt request client-server requestfactory


【解决方案1】:

尝试在第一个 onSuccess 方法中创建一个事件。处理您的事件后,您可以向服务器发送另一个请求。 查看How to use the GWT EventBus 以使用事件总线。

Thomas Broyer 的说法也是正确的。您应该只使用一个 RequestFactory 和一个 ClientFactory!

【讨论】:

    【解决方案2】:

    当您按照 Thomas Broyer 构建您的第二个客户工厂时,这可能是一个问题。您可能应该进入您的 ClientFactory.java 界面并在顶部添加单个客户端工厂实例。还要在 onSuccess(PostProxy response) 顶部放置一个 GWT.log("ON SUCCESS") 以确保它到达那里。

    public interface ClientFactory {
    
        public static final ClientFactory INSTANCE = GWT.create(ClientFactory.class); 
    ...
    

    然后你可以简单地做一些如下的事情

        final PostRequest request = ClientFactory.INSTANCE.getRequestFactory().postRequest();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-26
      • 1970-01-01
      • 2020-07-06
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多