Có thể gửi lại yêu cầu truyền RequestFactory không? Tôi muốn làm tương đương với điều này: How to resend a GWT RPC request khi sử dụng RequestFactory. Nó khá đơn giản để gửi lại cùng một tải trọng từ một yêu cầu trước đó, nhưng tôi cũng cần phải thực hiện một cuộc gọi đến cùng một phương thức. Đây là lớp RequestTransport của tôi và tôi hy vọng chỉ "hoàn thành" yêu cầu ban đầu sau khi xử lý, trong trường hợp này, yêu cầu cho người dùng về thông tin đăng nhập:Cách gửi lại yêu cầu 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()
//--------------------------------------------------------------------------------------------------
}
Mã của bạn khó đọc, nhưng bạn đang đi đúng hướng, vậy vấn đề với những gì bạn đã thử là gì? –
Vấn đề của tôi là biết cách bắt đầu yêu cầu đã kích hoạt phản hồi SC_UNAUTHORIZED. Ví dụ, nếu tôi có yêu cầu 'requestContext.getFooById (fooId) .fire (...)' và yêu cầu này trả về phản hồi trái phép thì tôi muốn kích hoạt lại nó. Tôi có thể gửi cùng một tải trọng và gọi lại cho cùng một bộ thu, nhưng tôi không biết cách tự động áp dụng "fire()" thành "getFooId()". (btw, những gì làm cho mã của tôi "khó đọc" ... Tôi rất tò mò? "). Cảm ơn! –
Điều gì sẽ xảy ra nếu bạn gửi cùng một tải trọng với cùng một máy thu? Đoán của tôi là nó nên Just Work ™. (Tôi thấy mã của bạn khó đọc bằng cách thiếu thụt đầu dòng - thông thường–, thiếu các dòng trống, và quá nhiều nhận xét vô dụng; đó là vấn đề về hương vị tôi đoán) –