2012-05-29 48 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