一尘不染

处理GWT RequestFactory服务器错误响应

java

我有一个新编码的GWT / GAE应用,该应用在客户端上使用RequestFactory和Editors,在背面使用自定义的Objectify DAO服务。

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

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

我在http://turbomanage.wordpress.com/2010/02/09/generic-dao-for-
objectify-2/使用Chandler的Generic DAO for Objectify 2

我的gwt活动正在调用persist(myProxy).fire(new Receiver <>)

我的dao代码针对业务逻辑情况(例如“找到重复的电子邮件地址-
想要登录?”)抛出IllegalArgumentException和其他RuntimeExceptions。

Receiver <>。onSuccess()可以很好地跟踪成功的结果。Receiver <>。onFailure()和Receiver
<>。onViolation()均不会报告RuntimeExceptions。

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

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


阅读 155

收藏
2020-12-03

共1个答案

一尘不染

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

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

根据下面的对话摘录, 网址
http://groups.google.com/group/google-web-
toolkit/browse_thread/thread/da863606b3893132/96956661c53e1064?hl=zh-
CN

Thomas Broyer onFailure应该包含您在服务器端抛出的异常的getMessage()。

您可以通过向RequestFactoryServlet提供自己的ExceptionHandler来对其进行调整(扩展它并使用其带有ExceptionHandler的构造函数)。

仅当您的实体未通过JSR-303 Bean验证时才调用onViolation,该验证在调用任何服务方法之前进行检查。

如果要“捕获”故障代码中的故障,则必须为persist()服务方法添加一个Receiver:
context.persist(p).to(new Receiver…

2020-12-03