2011-06-01 51 views
0

以下片段成功顯示Cat列表,但是當刷新驅動程序時,Cat對象中的值全爲空。如何使用帶驅動程序和RequestFactory的編輯器編輯GWT CellTable中的列表項

貓屋的名稱可以按預期進行編輯。

HasDataEditor<CatProxy> residentsEditor= HasDataEditor.of(cellTable) 

CatHouse{ 
    String name; 
    List<Cat> residents; 
} 
Cat{ 
    String name; 
    String favoriteColor; 
} 

這是我如何創建請求。 (摘自MobileWebApp示例項目)

// Flush the changes into the editable CatHouse. 
final CatHouseRequest context = (CatHouseRequest) clientFactory.getCatHouseEditView().getEditorDriver().flush(); 

/* 
* Create a persist request the first time we try to save this task. If 
* a request already exists, reuse it. 
*/ 
if (taskPersistRequest == null) { 
    taskPersistRequest = context.updateCatHouse(editTask).with(
      clientFactory.getCatHouseEditView().getEditorDriver().getPaths()); 
} 

// Fire the request. 
taskPersistRequest.fire(new Receiver<ActionProxy>() { 
    @Override public void onConstraintViolation(final Set<ConstraintViolation<?>> violations) { 
     ... 
    } 

    @Override public void onSuccess(final CatHouseProxy response) { 
     ... 
    } 
}); 

我在調用taskPersistRequest變量之前檢查了它。

  • taskPersistRequest.propertyRefs = [catHouse]

  • taskPersistRequest.requestContext具有 正確的值的CatHouse 和貓。

  • taskPersistRequest.requestData.parameters 只有一個CatHouse值, 沒有與貓有關的數據。 (這看起來像 問題

  • 上下文 的editProxies變量的 CatHouse和貓正確的價值觀。

+0

相關話題:HTTP:/ /groups.google.com/group/google-web-toolkit/browse_thread/thread/a4e75f4a492ea9aa/aeda2f3148fcdc65 – 2011-06-04 14:45:46

回答

1

今天我遇到了類似的問題。如果您在創建Cat項目之前創建CatHouse,則在同一個RequestContext上,持續CatHouse將失敗,因爲Cat項目尚不可用。

爲了解決這個問題:首先創建貓豆,後來創建CatHouse豆:

cat = request.create(Cat.class) 
catHouse = request.create(CatHouse.class) 

使用編輯器框架是不平凡的,但是,因爲它需要你通過CatHouse的實例時實現這個在編輯器驅動程序之前編輯器將觸發創建Cat實例。

可能的解決方法是將刷新的自動bean複製到新的請求上下文中,以便在CatHouse之前創建Cat。

(如果你沒有創造,而只是編輯貓屋,想request.edit方面(catHouse),而不是request.create(CatHouse.class))

+0

感謝您的回答。我試圖編輯CatHouse的Cats(當CatHouse第一次被持續存在時,它們被添加到服務器端)。是否需要在每個更新的Cat上調用編輯? 我希望在catHouse上編輯可以編輯它的貓。 – 2011-06-04 13:35:26

+0

是的,您需要爲每個Cat對象調用.edit,並將.edit(一個可變的代理)的返回值傳遞給編輯器。否則,Cat對象仍將被鎖定並且不可編輯。 Cat對象是由客戶端還是由服務器創建並不重要。 – fabiangebert 2011-06-06 12:41:52