如何使用带驱动程序和RequestFactory的编辑器编辑GWT CellTable中的列表项

问题描述:

以下片段成功显示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

今天我遇到了类似的问题。如果您在创建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