Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理GWT RequestFactory服务器错误响应_Java_Google App Engine_Gwt_Dao - Fatal编程技术网

Java 处理GWT RequestFactory服务器错误响应

Java 处理GWT RequestFactory服务器错误响应,java,google-app-engine,gwt,dao,Java,Google App Engine,Gwt,Dao,我有一个新编码的GWT/GAE应用程序,在客户端使用RequestFactory和编辑器,在后端使用定制的Objectify DAO服务 flush()然后persist()路径在成功时可以正常工作。 客户端JSR303也可以正常工作 我的问题是如何触发服务器警告/错误并处理UI更新 我正在使用Chandler的通用DAO进行Objectify 2 我的gwt活动正在调用persist(myProxy).fire(新接收器) 我的dao代码正在抛出IllegalArgumentExceptio

我有一个新编码的GWT/GAE应用程序,在客户端使用RequestFactory和编辑器,在后端使用定制的Objectify DAO服务

flush()然后persist()路径在成功时可以正常工作。 客户端JSR303也可以正常工作

我的问题是如何触发服务器警告/错误并处理UI更新

我正在使用Chandler的通用DAO进行Objectify 2

我的gwt活动正在调用persist(myProxy).fire(新接收器)

我的dao代码正在抛出IllegalArgumentException和其他业务逻辑情况下的运行时异常,如“找到重复的电子邮件地址-要改为登录吗?”

onSuccess()可以很好地跟踪成功的结果。 Receiver.onFailure()和Receiver.onViolation()都不报告运行时异常

(更正:正在为服务器端异常调用onFailure())

有更好的方法吗? DAO应该抛出哪些异常,以便onViolation()或onFailure()报告错误?
编辑器应该如何处理异常并从异常中恢复?

我发现最通用的命令序列是

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 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(); }

根据下面的对话摘录

托马斯·布罗耶 onFailure应包含 您在服务器上引发的异常 一边

您可以通过提供自己的 异常处理程序到 RequestFactoryServlet(扩展它并 使用其构造函数获取 例外处理程序)

只有在以下情况下才会调用onViolation 您的实体没有通过JSR-303bean 验证,在验证之前进行检查 调用任何服务方法

如果你想 “捕获”clidnt代码中的故障, 您必须为该设备添加一个接收器 persist()服务方法:
context.persist(p).to(新接收者