2012-05-29 51 views
0

在Java中,有ThreadLocal,它可以用来将一些数据从一个对象传送到另一个,而无需作为方法参数进行显式传递。GWT中的本地请求上下文

我需要拦截GWT请求并从中提取自定义HTTP头,然后我需要以某种方式存储头值以便以后处理。

问题是,提取标头的地方属于RequestBuilder,并且没有办法(?)将RequestBuilder中的变量传递给实际处理来自服务器的请求/响应的自定义代码。而且不可能将某些变量从客户端代码传递到该请求构建器。

ThreadLocal可能是解决方案,但它在GWT中不可用。有什么我可以使用的吗?

回答

0

您可以使用RequestBuilder.setHeader为您的HTTP请求设置标头值。
在后端,您可以使用servlet的HttpServletRequest从HTTP请求中检索标头值。

更新

一些类的静态实例变量:

public class SomeClass { 
    public static String myVar; 
} 

而在RequestBuilder代码,你可以如下操作:

RequestBuilder request = new RequestBuilder(url); 
request.setCallback(new RequestCallback() { 
    @Override 
    public void onResponseReceived(Request request, Response response) { 
     SomeClass.myVar = response.getHeader("someheader"); 
    } 
}); 
+0

我需要GWT ThreadLocal的,将它发送到服务器并不能解决问题 – jdevelop

+0

您可以发布一些代码以使问题更清楚。在JavaScript代码中没有线程,因此GWT中没有ThreadLocal。但是,您可以使用静态实例变量来存储值,然后从其他位置访问它。 –

+0

我想用RequestBuilder从HTTP响应中提取一些头部并将其放入某个变量,因此AsyncCallback(将由GWT代码执行)将可以访问该变量。 – jdevelop