2012-10-27 244 views
0

我使用RequestFactory與客戶端的服務器和RequestFactoryEditorDriver進行通信。所以編輯工作流程就像這樣。編輯創建新的代理:gwt與RequestFactory,處理客戶端和RequestFactoryEditorDriver服務器端異常

RequestContext reqCtx = clientFactory.getRequestFactory().Request(); 
UserAndAccountProxy userAndAccountProxy = reqCtx.create(UserAndAccountProxy.class); 
reqCtx.saveAndReturnProfileAndAccount(userAndAccountProxy).to(
    new Receiver<UserAndAccountProxy>() { 
     @Override 
     public void onSuccess(UserAndAccountProxy response) { 
     ... 
     } 

     @Override 
     public void onFailure(ServerFailure error) { 
     ... 
     }} 

而且保存按鈕點擊處理:

RequestContext reqCtx = view.getEditorDriver().flush(); 
    reqCtx.fire(); 

在服務器端saveAndReturnProfileAndAccount方法可以堅持,我可以在onFailure處方法處理拋出異常。之後,如果我使用新的請求上下文創建新代理並將其傳遞給我的編輯器,則所有字段都將空白。 那麼什麼是正確的方式來執行請求,如果出現錯誤使用數據,用戶已經填寫或可能我犯了我的編輯worklow錯誤?

+0

我嘗試使用客戶端中的相同字段創建類,並在編輯器中進行編輯。在保存處理程序創建代理類和複製字段到它並執行請求,但是,我認爲,這不是很好的解決方案。 – user1779661

回答

0

所以,我認爲,我找到了解決方案。我做了修改功能,創建的RequestContext:

private void edit(MyProxy proxy) { 

    RequestContext reqCtx = clientFactory.getRequestFactory().Request(); 

    if (proxy == null) { 
     // create proxy first time 
     proxy = reqCtx.create(UserAndAccountProxy.class); 
    } else { 
     // create immutable copy 
     proxy = reqCtx.edit(proxy); 
    } 

    final UserAndAccountProxy tmp = proxy; 

    reqCtx.saveAndReturnMyProxy(proxy).to(new Receiver<MyProxy>() { 

     @Override 
     public void onFailure(ServerFailure error) { 
     eventBus.showErrorInformation(error.getMessage()); 
     //recursive call with already filled proxy 
     edit(tmp); 
     } 

     @Override 
     public void onSuccess(UserAndAccountProxy response) { 
     eventBus.showInformation("It`s ok!"); 
     eventBus.goToMainPage(null); 
     } 
    }); 
    // start editing with editor 
    getView().onEdit(tmp, reqCtx); 
    } 

當我們開始編輯代理功能,編輯需要蜜蜂調用空參數和新的清潔代理將被創建。之後,我們開始用編輯器編輯它。在保存按鈕上單擊我們執行請求到服務器。如果它以成功結束 - 我們打開另一個頁面。如果請求以錯誤結束,我們創建新的不可變副本ant將其推送給編輯器。