क्या यह संभव है एक RequestFactory प्रसारण पुनः भेजने के लिए पुन: भेजने के लिए? मैं इसके बराबर करना चाहता हूं: How to resend a GWT RPC request RequestFactory का उपयोग करते समय। पिछले अनुरोध से वही पेलोड भेजना काफी आसान है, लेकिन मुझे उसी विधि में कॉल करने की भी आवश्यकता है। यहाँ मेरी RequestTransport वर्ग है, और मैं, बस की देखभाल करने के बाद मूल अनुरोध "Refire" करने की उम्मीद कर रहा हूँ इस मामले में, लॉगइन क्रेडेंशियल्स के लिए उपयोगकर्ता के लिए एक अनुरोध:कैसे एक GWT RequestFactory अनुरोध
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()
//--------------------------------------------------------------------------------------------------
}
आपका कोड पढ़ना मुश्किल है, लेकिन आप सही रास्ते पर हैं, तो आपने जो प्रयास किया है उसके साथ क्या समस्या है? –
मेरा मुद्दा यह जानने के लिए है कि SC_UNAUTHORIZED प्रतिक्रिया को ट्रिगर करने वाले अनुरोध को कैसे शुरू किया जाए। उदाहरण के लिए, यदि मेरे पास अनुरोध है 'requestContext.getFooById (fooId) .fire (...)' और यह अनुरोध अनधिकृत प्रतिक्रिया देता है तो मैं इसे फिर से आग लगाना चाहता हूं। मैं वही पेलोड भेज सकता हूं, और उसी रिसीवर को कॉलबैक भेज सकता हूं, लेकिन मुझे नहीं पता कि "getFooId()" को स्वचालित रूप से "आग()" को कैसे लागू किया जाए। (Btw, क्या मेरी कोड बनाया "कठिन पढ़ने के लिए" ... मैं बहुत उत्सुक हूँ? ")। धन्यवाद! –
यदि आप एक ही रिसीवर के साथ एक ही पेलोड भेजने क्या होता है? मेरा अनुमान है कि यह सिर्फ काम ™ चाहिए। (मैं अपने कोड खरोज -primarily-, रिक्त लाइनों, और भी कई बेकार टिप्पणियों की कमी की कमी से पढ़ने के लिए मुश्किल लगता है, यह स्वाद मुझे लगता है) –