2013-07-10 27 views
1

我想嵌套两个请求工厂调用彼此。我检索一个post对象,并在success-method中再次使用同一个对象(仅用于测试目的,对于其他请求(例如persistence),我获得相同的行为)。GWT请求工厂 - 另一个请求的成功方法内的火灾请求

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

我没有收到任何错误消息。如果我调试代码,一切正常,直到第二个请求被触发。那么什么都没发生即使我为第二个请求的接收者实现了“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。

+4

我无法解释,但我可以告诉你,你应该只为您的整个应用程序的单一'MyRequestFactory'。您应该也可以为'ClientFactory'做到这一点。 –

+0

试过了,但没有改变任何东西 – jan

回答

1

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

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

+0

甚至没有事件总线的方法正在工作! – jan

1

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

public interface ClientFactory { 

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

然后,你可以简单的做服用点像下面

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

只使用一个请求工厂也没有为我工作 – jan