gwt - 如何重新发送 GWT RequestFactory 请求

标签 gwt gwt-rpc requestfactory

是否可以重新发送 RequestFactory 传输?我想做相当于这样的事情:How to resend a GWT RPC request使用RequestFactory时。从先前的请求中重新发送相同的有效负载相当简单,但我还需要调用相同的方法。这是我的 RequestTransport 类,我希望在处理完对用户登录凭据的请求后“重新触发”原始请求:

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

最佳答案

根据 Thomas 的建议,我尝试发送另一个请求,只是替换了 RequestTransport.send() 方法中的有效负载和接收器,结果成功了;我猜想请求工厂没有保留进一步的上下文,并且来自服务器的响应足以让 RF 确定需要执行哪些操作来解压请求响应<之外的响应 返回到 RequestCallback.onResponseReceived() 方法。如果有人有兴趣查看我的代码,请告诉我,我会将其发布在这里。

关于gwt - 如何重新发送 GWT RequestFactory 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13833714/

相关文章:

java - map 信息窗口中的文本颜色没有改变

android - 设计 "Platform-Independent"GWT 服务器的最佳方法是什么?

java - 可以使用蓝/绿部署部署 GWT 应用程序吗?

java - 这些 XSRF 保护也适用于 RequestFactory 吗?

gwt - GWT 2.4 中客户端上的 RequestFactory 服务继承

eclipse - 将 gwt 应用程序部署到 tomcat 不会加载已编译的 javascript

java - GWT DateTimeFormat 解析以提供 DateBox

gwt - 如何将Clickhandler添加到cellTable单元格(或row)

Tomcat 中的 GWT 2.5 应用程序部署?

gwt - 在 GWT 应用程序中,如何保护我的地点和事件免受未经授权的用户的侵害?