Ist es möglich, eine RequestFactory-Übertragung erneut zu senden? Ich möchte das Äquivalent von diesem tun: How to resend a GWT RPC request bei der Verwendung von RequestFactory. Es ist ziemlich einfach, die gleiche Nutzlast von einer vorherigen Anfrage erneut zu senden, aber ich muss auch einen Aufruf an dieselbe Methode senden. Hier ist meine RequestTransport Klasse, und ich bin der Hoffnung, nur „Wiederzündungs“ die ursprüngliche Anforderung nach Pflege Einnahme von, in diesem Fall eine Anforderung an den Benutzer-Anmeldeinformationen:So senden Sie eine GWT RequestFactory-Anforderung erneut
package org.greatlogic.rfexample2.client;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport;
/**
* Every request factory transmission will pass through the single instance of this class. This can
* be used to ensure that when a response is received any global conditions (e.g., the user is no
* longer logged in) can be handled in a consistent manner.
*/
public class RFERequestTransport extends DefaultRequestTransport {
//--------------------------------------------------------------------------------------------------
private IClientFactory _clientFactory;
//==================================================================================================
private final class RFERequestCallback implements RequestCallback {
private RequestCallback _requestCallback;
private RFERequestCallback(final RequestCallback requestCallback) {
_requestCallback = requestCallback;
} // RFERequestCallback()
@Override
public void onError(final Request request, final Throwable exception) {
_requestCallback.onError(request, exception);
} // onError()
@Override
public void onResponseReceived(final Request request, final Response response) {
if (response.getStatusCode() == Response.SC_UNAUTHORIZED) {
_clientFactory.login();
}
else {
_clientFactory.setLastPayload(null);
_clientFactory.setLastReceiver(null);
_requestCallback.onResponseReceived(request, response);
}
} // onResponseReceived()
} // class RFERequestCallback
//==================================================================================================
@Override
protected void configureRequestBuilder(final RequestBuilder builder) {
super.configureRequestBuilder(builder);
} // configureRequestBuilder()
//--------------------------------------------------------------------------------------------------
@Override
protected RequestCallback createRequestCallback(final TransportReceiver receiver) {
return new RFERequestCallback(super.createRequestCallback(receiver));
} // createRequestCallback()
//--------------------------------------------------------------------------------------------------
void initialize(final IClientFactory clientFactory) {
_clientFactory = clientFactory;
} // initialize()
//--------------------------------------------------------------------------------------------------
@Override
public void send(final String payload, final TransportReceiver receiver) {
String actualPayload = _clientFactory.getLastPayload();
TransportReceiver actualReceiver;
if (actualPayload == null) {
actualPayload = payload;
actualReceiver = receiver;
_clientFactory.setLastPayload(payload);
_clientFactory.setLastReceiver(receiver);
}
else {
actualReceiver = _clientFactory.getLastReceiver();
}
super.send(actualPayload, actualReceiver);
} // send()
//--------------------------------------------------------------------------------------------------
}
Ihr Code ist schwer zu lesen, aber Sie sind auf dem richtigen Weg, also was ist das Problem mit dem, was Sie versucht haben? –
Mein Problem besteht darin, zu wissen, wie die Anforderung initiiert wird, die die SC_UNAUTHORIZED-Antwort ausgelöst hat. Zum Beispiel, wenn ich die Anfrage 'requestContext.getFooById (fooId) .fire (...)' habe und diese Anfrage die nicht autorisierte Antwort zurückgibt, dann möchte ich dies erneut auslösen. Ich kann die gleiche Nutzlast und den Rückruf an denselben Empfänger senden, aber ich weiß nicht, wie man "fire()" automatisch auf "getFooId()" anwendet. (Übrigens, was meinen Code "schwer lesbar" gemacht hat ... Ich bin sehr neugierig?) Danke! –
Was passiert, wenn Sie die gleiche Nutzlast mit dem gleichen Empfänger senden? Ich schätze, es sollte Just Work ™ sein. (Ich finde deinen Code schwer zu lesen durch fehlende Einrückung - vor allem - Mangel an Leerzeilen und zu viele nutzlose Kommentare, es ist eine Frage des Geschmacks, denke ich) –