使用RequestFactory的gwt,处理客户端上的服务器端异常和RequestFactoryEditorDriver

时间:2012-10-27 18:08:41

标签: exception gwt editor requestfactory

我使用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方法中处理。之后,如果我使用新的请求上下文创建新代理并将其传递给我的编辑器,则所有字段都将被清空。 那么,执行请求的正确方法是什么,如果出现问题,请使用用户已经填写的数据,或者在编辑工作流程中我犯了错误?

1 个答案:

答案 0 :(得分: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);
  }

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