GWT:向服务器发出请求后继续编辑同一对象
在GWT服务器请求后是否可以继续编辑同一对象 考虑代码中的最佳实践GWT:向服务器发出请求后继续编辑同一对象,gwt,requestfactory,gwt-2.4,requestcontext,Gwt,Requestfactory,Gwt 2.4,Requestcontext,在GWT服务器请求后是否可以继续编辑同一对象 考虑代码中的最佳实践 void start(){ //要么得到p context1.get(..).to(新接收器{onSuccess(P resp){P=resp;}…}).fire(); //或者创建p p=context2.create(p.class); //然后保存p req=context2.persist(p).to(新接收器){/*注意不要使用context1*/ onViolation(…){/*JSR303处理程序*/}; onF
void start(){
//要么得到p
context1.get(..).to(新接收器{onSuccess(P resp){P=resp;}…}).fire();
//或者创建p
p=context2.create(p.class);
//然后保存p
req=context2.persist(p).to(新接收器){/*注意不要使用context1*/
onViolation(…){/*JSR303处理程序*/};
onFailure(error){/*handle*/error.getMessage()};
onSuccess(X X){/*which persist()返回处理程序*/};});
//带p的驱动器编辑器
驱动程序编辑(p,req);
}
....
void onSave(){
//编辑
ctxt=driver.flush()/*注意ctxt==context2*/
if(driver.hasrerrors()){/*JSR 303 handler*/};
//射频
ctxt.fire();
}
问题是,如何处理最后一行中未成功的服务器响应?(将接收器添加到“ctxt.fire();”)
void onSave(){
//编辑
ctxt=driver.flush()/*注意ctxt==context2*/
if(driver.hasrerrors()){/*JSR 303 handler*/};
//射频
ctxt.火灾(新接收器{
onSuccess(){…如何继续编辑“p”对象?..}
onFailure(){…如何继续编辑“p”对象?..});
});
}
例如,在保存时,服务器执行一些附加验证(例如,该值是唯一的)。并且不接受保存它
所以,服务器请求使用“onSuccess(response)”方法完成,但对象未保存(响应值可能包含错误列表)
是否允许用户继续编辑未保存但在客户端更新的对象,并向服务器发出另一个请求
我看到的“僵局”:
- 无法重用请求上下文(ctxt),因为将引发“请求已在进行”异常
- 不可能创建新上下文,因为对对象的所有修改都在旧上下文中(因此它们将丢失)
AbstractRequestContext
中的onTransportSuccess
——这将告诉您:您可以继续使用请求上下文的唯一情况是冲突和一般故障。因此,要么强制执行冲突,要么将(错误的)对象返回给客户机,并使用新的请求上下文继续处理它(这将导致实体代理出现问题,因为它将失去引用状态)
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();
}
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? ... } });
});
}