2013-07-10 60 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