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