Локальный контекст запроса в GWT

В Java есть ThreadLocal, который можно использовать для переноса некоторых данных из одного объекта в другой без явной передачи в качестве аргумента метода.

Мне нужно перехватить GWT-запрос и извлечь из него собственный HTTP-заголовок, затем мне нужно каким-то образом сохранить значение заголовка для последующей обработки.

Проблема в том, что место для извлечения заголовка принадлежит RequestBuilder, и нет способа (?) передать переменную из RequestBuilder в пользовательский код, фактически обрабатывающий запрос/ответ с сервера. И невозможно передать некоторую переменную из клиентского кода в этот построитель запросов.

ThreadLocal может быть решением, однако он недоступен в GWT. Есть ли что-то, что я могу использовать?


person jdevelop    schedule 29.05.2012    source источник


Ответы (1)


Вы можете использовать RequestBuilder.setHeader, чтобы установить значения заголовков для вашего HTTP-запроса.
В бэкенде вы можете использовать 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");
    }
});
person Ümit    schedule 30.05.2012
comment
Мне нужен ThreadLocal в GWT, его отправка на сервер не решает проблему. - person jdevelop; 30.05.2012
comment
Можете ли вы опубликовать код, чтобы сделать вопрос более ясным. В коде javascript нет потоков, поэтому в GWT нет ThreadLocal. Однако вы можете использовать статическую переменную экземпляра для хранения значений, а затем получить к ней доступ из другого места. - person Ümit; 30.05.2012
comment
Я хотел извлечь некоторый заголовок из HTTP-ответа с помощью RequestBuilder и поместить его в какую-то переменную, чтобы AsyncCallback (который будет выполняться кодом GWT) имел доступ к переменной. - person jdevelop; 30.05.2012