GWT请求工厂 - 另一个请求的成功方法内的Fire请求

时间:2013-07-10 18:10:59

标签: java gwt request client-server requestfactory

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

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

我没有收到任何错误消息。如果我调试代码,一切都会工作,直到第二个请求被触发。那么什么都没发生。后端上的方法没有被调用,前端没有显示错误,即使我为第二个请求的接收者实现了“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。

2 个答案:

答案 0 :(得分:1)

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

Thomas Broyer声明也是对的。您应该只使用一个RequestFactory和一个ClientFactory!

答案 1 :(得分:1)

根据Thomas Broyer建造第二个客户工厂时,这可能会出现问题。您应该进入ClientFactory.java接口,并在顶部添加单个客户端工厂实例。还将一个GWT.log(“ON SUCCESS”)放在onSuccess(PostProxy响应)的顶部,以确保它到达那里。

public interface ClientFactory {

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

然后你就可以像以下一样简单地做点什么

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