如何使用带驱动程序和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和猫正确的价值观。
今天我遇到了类似的问题。如果您在创建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))
感谢您的回答。我试图编辑CatHouse的Cats(当CatHouse第一次被持续存在时,它们被添加到服务器端)。是否需要在每个更新的Cat上调用编辑? 我希望在catHouse上编辑可以编辑它的猫。 – 2011-06-04 13:35:26
是的,您需要为每个Cat对象调用.edit,并将.edit(一个可变的代理)的返回值传递给编辑器。否则,Cat对象仍将被锁定并且不可编辑。 Cat对象是由客户端还是由服务器创建并不重要。 – fabiangebert 2011-06-06 12:41:52
相关话题:HTTP:/ /groups.google.com/group/google-web-toolkit/browse_thread/thread/a4e75f4a492ea9aa/aeda2f3148fcdc65 – 2011-06-04 14:45:46