【问题标题】:handling GWT RequestFactory server error responses处理 GWT RequestFactory 服务器错误响应
【发布时间】:2011-07-13 17:18:56
【问题描述】:

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

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

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

我在 Objectify 2 中使用 Chandler 的通用 DAO http://turbomanage.wordpress.com/2010/02/09/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() 报告错误? 编辑器应如何处理异常并从异常中恢复?

【问题讨论】:

    标签: java google-app-engine gwt dao


    【解决方案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=en

    托马斯·布罗耶 onFailure 应该包含 您在服务器上抛出的异常 边。

    你可以通过提供你自己的来调整它 异常处理程序 RequestFactoryServlet(扩展它并 使用它的构造函数 异常处理程序)。

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

    如果你想 “捕捉”客户代码中的故障, 您必须为 persist() 服务方法:
    context.persist(p).to(new Receiver…

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2023-04-08
      • 2017-02-08
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多