0

我使用 RequestFactory 与客户端的服务器和 RequestFactoryEditorDriver 进行通信。所以编辑工作流程看起来像这样。创建新的编辑代理:

RequestContext reqCtx = clientFactory.getRequestFactory().Request();
UserAndAccountProxy userAndAccountProxy = reqCtx.create(UserAndAccountProxy.class);
reqCtx.saveAndReturnProfileAndAccount(userAndAccountProxy).to(
    new Receiver<UserAndAccountProxy>() {
      @Override
      public void onSuccess(UserAndAccountProxy response) {
      ...
      }

      @Override
      public void onFailure(ServerFailure error) {
        ...
      }}

和保存按钮点击处理:

    RequestContext reqCtx = view.getEditorDriver().flush();
    reqCtx.fire();

在服务器端 saveAndReturnProfileAndAccount 方法可以在持久化时抛出异常,我可以在 onFailure 方法中处理。之后,如果我使用新的请求上下文创建新代理并将其传递给我的编辑器,所有字段都将被空白。那么执行请求的正确方法是什么,如果出现问题,使用用户已经填写的数据,或者我在编辑工作流中犯了错误?

4

1 回答 1

0

所以,我想,我找到了解决方案。我对创建 RequestContext 的函数进行了更改:

  private void edit(MyProxy proxy) {

    RequestContext reqCtx = clientFactory.getRequestFactory().Request();

    if (proxy == null) {
      // create proxy first time
      proxy = reqCtx.create(UserAndAccountProxy.class);
    } else {
      // create immutable copy
      proxy = reqCtx.edit(proxy);
    }

    final UserAndAccountProxy tmp = proxy;

    reqCtx.saveAndReturnMyProxy(proxy).to(new Receiver<MyProxy>() {

      @Override
      public void onFailure(ServerFailure error) {
        eventBus.showErrorInformation(error.getMessage());
        //recursive call with already filled proxy
        edit(tmp);
      }

      @Override
      public void onSuccess(UserAndAccountProxy response) {
        eventBus.showInformation("It`s ok!");
        eventBus.goToMainPage(null);
      }
    });
    // start editing with editor
    getView().onEdit(tmp, reqCtx);
  }

当我们开始编辑代理功能时,需要使用空参数调用编辑,并且将创建新的干净代理。之后,我们开始使用编辑器对其进行编辑。在保存按钮上单击我们执行对服务器的请求。如果它以成功结束 - 我们打开另一个页面。如果请求以错误结束,我们创建新的不可变副本并将其推送到编辑器。

于 2012-11-12T13:48:09.660 回答