如何使用请求工厂保存/编辑对象并刷新数据网格

时间:2014-02-10 16:36:28

标签: gwt requestfactory

我从请求工厂的dynatableref示例开始。我读了请求工厂文件。但我仍然不清楚生命周期或客户端到服务器的流程。 我想打电话给服务器。还插入数据和更新网格。使用RPC调用很容易。但我不明白如何处理Request Factory。 这是请求工厂的一种方法。它自动调用服务器的persist方法。它也会自动刷新网格。我可以告诉它有什么用吗?

   context.fire(new Receiver<Void>() {
      @Override
      public void onConstraintViolation(Set<ConstraintViolation<?>> errors) {
        // Otherwise, show ConstraintViolations in the UI
        dialog.setText("Errors detected on the server");
        editorDriver.setConstraintViolations(errors);
      }

      @Override
      public void onSuccess(Void response) {
        // If everything went as planned, just dismiss the dialog box
        dialog.hide();
      }
    });

我也想将一些数据编辑到网格中。这种方法对我有帮助吗?或者我必须写其他方法。 我写了其他方法,如

  requestFactory.schoolCalendarRequest().savePerson(personProxy).fire(new Receiver<PersonProxy>() {
        @Override
        public void onSuccess(PersonProxy person) {
          // Re-check offset in case of changes while waiting for data
             dialog.hide();
        }
      });

这不是刷新网格。为什么呢?

1 个答案:

答案 0 :(得分:1)

RuequestFactory的流客户端 - 服务器类似于RPC或任何XMLHTTP请求

1)您在服务器上调用远程方法。

2)您在Receiver对象(Callback对象)中收到回复。在onSeccess方法中,如果一切顺利,您将获得返回的对象。 onFailure如果出现问题,您会收到错误。

因此,要从服务器检索的数据中填充Person表,代码应该类似于

 requestFactory.schoolCalendarRequest().getPersonList(param1).fire(new Receiver<List<PersonProxy>>() {
    @Override
    public void onSuccess(List<PersonProxy> personList) {
       personTable.getDataProvider().setList(personList);
    }
  });

现在,当您编辑人员(例如姓名)时,在您请求RequestContext之前初始化并使用相同的fire非常重要。因此,更新Person名称的部分应该类似于

column.setFieldUpdater(new FieldUpdater<Person, String>() {
  @Override
  public void update(PersonProxy personProxy, String value) {
    RequestContext requestContext =  requestFactory.schoolCalendarRequest()
    PersonProxy personProxy= requestContext.edit(personProxy);
    personProxy.setName(value);
        requestFactory.schoolCalendarRequest().savePerson(personProxy).fire(new Receiver<PersonProxy>() {
        @Override
        public void onSuccess(PersonProxy person) {
            //Do something after the update
         }
        });
      }
  });

RequestFactory的互动应放在Presenter中,因此您应该考虑实施MVP模式。