假设我们有一个这样定义的域实体:
interface MyNode {
MyNode getParent();
void setParent(MyNode node);
List<MyNode> GetChildren();
void AddChild(MyNode node);
void RemoveChild(MyNode node);
String getText();
void setText(String text);
}
我正在尝试实现一个 GWT 网络应用程序来处理这些实体。我正在使用请求工厂和编辑器框架。而且我肯定会遇到一些问题:-)
由于请求工厂的定义很简单,我不会在这里发布它们。我只想说所有与孩子有关的东西都是一组InstanceRequest
s。
所以,问题#1
假设我们想要为整棵树创建一个导航器。这个想法是,每次我们只看到一个节点时,我们可以导航到它的父节点或它的一个子节点。我们希望这个导航器使用编辑器框架,所以我们构建了像MyNodeEditor
and之类的编辑器ChildrenListEditor
。
据我所知,编辑器仅直接适用于 bean 样式的实体。因此,只要使用MyNode
text
属性没问题,使用children
属性 ( ChildrenListEditor
) 就需要实例请求。
我的解决方案是, makeMyNodeEditor
成为 a ValueAwareEditor
,当它设置它的值时,它会启动 anInstanceRequest
以获取子节点列表。然后该列表绑定到ChildrenListEditor
.
有没有更简单的解决方案?我相信这是一个非常基本的场景。
问题 #2
我们现在决定让我们MyNodeEditor
的编辑能力。bean 样式的属性又好了,但是孩子呢?使用问题 #1 中提到的代码:
@Override public void setValue(MyNodeProxy value) {
...
requestFactory.myNodeRequest().getChildNodes().using(value).fire(new Receiver<List<MyNodeProxy>>() {
@Override public void onSuccess(List<MyNodeProxy> response) {
childrenDriver.display(response);
}
});
...
}
导致“由:java.lang.IllegalArgumentException:尝试编辑以前由另一个 RequestContext 编辑的 EntityProxy”,因为我在这里对同一实体有 2 个不同的请求。我无权访问RequestContext
我在 at 构建的MyNodeEditor
,所以我正在构建新的,但它失败了。什么是正确的方法?