traitement des réponses D'erreur GWT RequestFactory server

j'ai une application GWT/GAE nouvellement codée qui utilise RequestFactory et Editors sur le client et un Service Dao Objectify personnalisé sur le dos.

flush() puis persist() chemins de beaux travaux sur la réussite. Côté Client JSR 303 fonctionne aussi bien que l'on peut s'y attendre.

ma question Est de savoir comment déclencher les avertissements/erreurs du serveur et gérer les mises à jour de L'interface utilisateur?

J'utilise le DAO générique de Chandler pour Objectify 2 à http://turbomanage.wordpress.com/2010/02/09/generic-dao-for-objectify-2/

mon gwt activité est l'appel de persister( myProxy ).feu( nouveau Récepteur )

mon code dao lance IllegalArgumentException et autres exceptions RuntimeExceptions pour des situations de logique métier comme " dupliquer l'adresse email trouvée - vous voulez vous connecter à la place?"

Récepteur.onSuccess () fonctionne bien pour suivre un résultat réussi. ni le Récepteur.onFailure () nor Récepteur.><onViolation() rapport de la RuntimeExceptions.

( Correction: onFailure() est appelée à côté serveur exceptions)

Est-il une meilleure façon de le faire? Quelles exceptions l'OFA devrait-il faire pour qu'onViolation() ou onFailure() signalent les erreurs? Comment le(s) rédacteur (s) doit-il (doivent) gérer et récupérer de l'exception?

23
demandé sur Stevko 2011-03-11 21:51:55

1 réponses

j'ai trouvé la séquence de commande la plus polyvalente pour être

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

basé sur l'extrait de conversation ci-dessous à