Domanda

C'è un modo per annullare / abort richieste Richiesta di fabbrica? Utilizzando GWT 2.3

È stato utile?

Soluzione

Un'altra opzione sarebbe quella di creare un tipo com.google.web.bindery.requestfactory.shared.RequestTransport alternativa, invece di utilizzare DefaultRequestTransport. Aspetto negativo di questo (e rialzo per l'approccio di BobV) è che non si sa quando nella richiesta sul server si uccide, quindi potrebbe aver già eseguito alcuni dei vostri metodi - non sarà possibile ottenere un feedback da nessuno di loro, ti basta smettere la richiesta in uscita.

Ho il sospetto che questo è il motivo per cui RF non ha questa funzione già, come fa RPC. Prendere in considerazione anche il caso della RPC se o RequestBuilder - come si fa quelli notificare al server che hanno cambiato la loro mente, e di non eseguire la richiesta? La mia comprensione è che non lo fanno - l'unico modo in cui sono chiusi precoce è quando cercano di lettura / scrittura alla risposta, e ottenere un errore di tcp, in quanto la connessione è stata chiusa. (E 'possibile mi sbaglio, e che un altro thread tiene d'occhio lo stato della connessione TCP e chiama thread.stop(Throwable), ma fermata è stato sconsigliato per un bel po '.)

Un pensiero sarebbe quello di inviare un messaggio al server, dicendogli di uccidere altre richieste dalla stessa sessione - ciò richiederebbe la partecipazione attiva nel codice del server, però, forse realizzato generica in un sottotipo ServiceLayerDecorator, probabilmente in almeno invoke, loadDomainObject(s), e getSetter, tra gli altri. Questo è abbastanza chiaramente coinvolti per chiedere GWT a costruirlo per voi se ...

Altri suggerimenti

Non v'è alcun modo per annullare una richiesta dopo che il metodo fire() è stato chiamato. Prendere in considerazione la costruzione di una classe base Receiver personalizzato come il seguente:

public abstract class CancelableReceiver<V> extends Receiver<V> {
  private boolean canceled;

  public void cancel() {
    canceled = true;
  }

  @Override
  public final void onSuccess(V response) {
    if (!canceled) {
      doOnSuccess(response);
    }
  }

  protected abstract void doOnSuccess(V response);
}

Il modello può essere ripetuta per altri metodi nel tipo Receiver.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top