handling GWT RequestFactory server error responses

前端 未结 1 908
难免孤独
难免孤独 2021-02-04 00:49

I have a newly coded GWT/GAE app that uses RequestFactory and Editors on the client and a custom Objectify DAO Service on the back.

The flush() then persist() paths work

1条回答
  •  孤城傲影
    2021-02-04 01:04

    I've found the most versatile command sequence to be

    void start() {
        // Either get p
        context1.get(..).to( new Receiver

    { onSuccess(P resp){p = resp;} ... }).fire(); // OR create p p = context2.create( P.class ); // Then save p req = context2.persist(p).to( new Receiver

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

    Based on the conversation excerpt below at http://groups.google.com/group/google-web-toolkit/browse_thread/thread/da863606b3893132/96956661c53e1064?hl=en

    Thomas Broyer onFailure should containg the getMessage() of the exception you threw on the server side.

    You can tweak it by providing your own ExceptionHandler to the RequestFactoryServlet (extend it and use its constructor taking an ExceptionHandler).

    onViolation will only be called if your entities do not pass JSR-303 Bean Validation, which is checked before calling any service method.

    If you want to "catch" the failure in clidnt code, you have to add a Receiver for the persist() service method:
    context.persist(p).to(new Receiver…

    0 讨论(0)
提交回复
热议问题