【问题标题】:GWT RequestFactory, Editors - working with tree-like structuresGWT RequestFactory, Editors - 使用树状结构
【发布时间】:2011-11-03 14:04:59
【问题描述】:

假设我们有一个这样定义的域实体:

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 网络应用程序来处理这些实体。我正在使用请求工厂和编辑器框架。而且我肯定有一些问题:-)

由于请求工厂定义很简单,我不会在这里发布它们。我只想说所有与孩子有关的东西都是一组InstanceRequests。

那么,问题 #1

假设我们想要为整棵树创建一个导航器。这个想法是,每次我们只看到一个节点时,我们可以导航到它的父节点或它的一个子节点。我们希望这个导航器使用编辑器框架,所以我们构建像 MyNodeEditorChildrenListEditor 这样的编辑器。

据我所知,编辑器仅直接适用于 bean 样式的实体。因此,只要使用 MyNode text 属性没问题,使用 children 属性 (ChildrenListEditor) 需要实例请求。

我的解决方案是,将MyNodeEditor 设置为ValueAwareEditor,当它设置它的值时,它会启动一个InstanceRequest 以获取子节点列表。然后将该列表绑定到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 我在MyNodeEditor 构建的,所以我正在构建新的并且它失败了。什么是正确的方法?

【问题讨论】:

    标签: java gwt requestfactory gwt-editors


    【解决方案1】:
    1. 如果您在 MyNodeProxy 上有一个 List&lt;MyNodeProxy&gt; getChildren() 属性来访问子级,而不是触发一个不同的请求,这会更容易。

    2. 您可以通过在编辑器上实现HasRequestContext 来访问您传递给RequestFactoryEditorDriverRequestContext。但在这种情况下,它不会帮助您,因为(从您的编辑器中)触发它会冻结它,从而使其无法用于其他任何事情(例如在刷新编辑器驱动程序后保存节点)。如果您无法将getChidren 添加到您的MyNodeProxy,那么我建议在编辑器驱动程序中编辑节点之前获取子列表(或者,您可以使用基于节点 ID 的请求,而不是传递节点实例作为参数或 using() 值,这是导致错误的原因)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 2011-05-26
      相关资源
      最近更新 更多