是否可以在 GWT 服务器请求后继续编辑同一个对象?
考虑另一个问题的最佳实践代码
void start() {
// Either get p
context1.get(..).to( new Receiver<P> { onSuccess(P resp){p = resp;} ... }).fire();
// OR create p
p = context2.create( P.class );
// Then save p
req = context2.persist(p).to( new Receiver<P>{ /* note do not use context1 */
onViolation(...) { /*JSR 303 handler*/ };
onFailure( error ) { /* handle */ error.getMessage() };
onSuccess(X x) { /* whatever persist() returns handler */ }; } );
// drive editor with p
driver.edit( p, req);
}
....
void onSave() {
// editor
ctxt = driver.flush() /* note ctxt == context2 */
if ( driver.hasErrors() ) { /*JSR 303 handler*/};
// RF
ctxt.fire();
}
问题是,如何在最后一行处理不成功的服务器响应?(将接收器添加到“ctxt.fire();”)
void onSave() {
// editor
ctxt = driver.flush() /* note ctxt == context2 */
if ( driver.hasErrors() ) { /*JSR 303 handler*/};
// RF
ctxt.fire(new Receiver<S>{
onSuccess() { ... how to continue editing the "p" object? ... }
onFailure() { ... how to continue editing the "p" object? ... } });
});
}
例如,在保存时,服务器会进行一些额外的验证(例如,该值是唯一的)。并且不接受保存。
因此,服务器请求以“onSuccess(response)”方法结束,但对象未保存(响应值可能包含错误列表)。
是否可以允许用户继续编辑未保存但在客户端对象上更新并向服务器发出另一个请求?
我看到的“僵局”:
- 无法重用请求上下文(ctxt),因为会抛出“A request is already in progress”异常。
- 不可能创建新的上下文,因为对对象的所有修改都在旧上下文中(因此它们将丢失)。