2015-06-17 1 views
1

Я загружаю несколько изображений с функцией загрузки, написанной в java. Как только выполняется загрузка, появляется gif, показывающая индикатор выполнения. Теперь, когда есть тайм-аут сеанса, я перенаправляюсь на страницу входа.перенаправление не происходит, хотя местоположение имеет правильный url

if (StringUtils.isNotBlank(request.getQueryString())) { 
     queryString = request.getServletPath() + "?" + request.getQueryString(); 
    } else { 
     queryString = request.getServletPath(); 
    } 

    LOGGER.debug("Query String:" + queryString); 
    if (!StringUtils.equalsIgnoreCase(StringUtils.substringAfterLast(queryString, ApplicationConstants.DOT), 
        ApplicationConstants.JSON)) { 
     request.getSession().setAttribute(ApplicationConstants.QUERY_STRING, queryString); 
    } 
    try { 
     LOGGER.error("In navigateToLandingPage. Redirecting to Failure View:" + this.getFailureView()); 
     response.sendRedirect(request.getContextPath() + "/" + this.getFailureView()); 
     // response.setHeader("Refresh", "5; URL=http://XXXX/login.htm"); 
    } catch (IOException e) { 
     throw new BusinessException("Exception in redirecting", "-1", this.getClass().getCanonicalName(), e); 
    } 

Когда я анализирую сети в браузере я могу видеть ответ с 302 статусом, а также место имеет предполагаемый URL, но некоторые, как ответ на не получение обработки и застрял на экране прогресс бар. Если я вручную обновляю застрявшую страницу, я направляюсь на страницу входа в систему, я пытаюсь добавить response.setHeader («Обновить», «5; URL = http://lXXXXX/login.htm»); ниже перенаправления, но не повезло. Может кто-нибудь, пожалуйста, помогите мне с этим.

Существует обходное решение, где вместо отправки 302 я отправляю 901, который я проверяю на js и направляю к логину, который работает нормально, но я намереваюсь использовать перенаправление.

+0

Вы используете Ajax, если так 302 обрабатывается браузером и не будет виден JS. Обходной путь заключается в том, что вы описываете возврат другого кода состояния и обрабатываете его в js. –

+0

@ M.Deinum - Спасибо, я сделал это, как я упомянул выше, я отправил 901 вместо этого, и да, вы правы, я понял это сейчас, так как re-direct отправил 302, я не смог прочитать его в JS. Я закрою это сейчас :) – user3172272

ответ

1

Итак, запрос был запущен асинхронно с использованием JS вместо синхронного использования веб-браузера? Другими словами, вы пытались перенаправить запрос ajax?

Если вы отправляете перенаправление в качестве ответа на запрос ajax, то XMLHttpRequest по умолчанию просто выполнит эту переадресацию. То есть он повторно отправит запрос ajax на этот URL. Это явно не то, что вы намерены. Вы хотите синхронную переадресацию, а не асинхронную.

Канонический подход заключается в том, чтобы просто инструктировать движку ajax каким-то образом, что ему необходимо выполнить вызов window.location по данному URL-адресу. Если вы используете JSON или XML в качестве формата данных, вы можете просто добавить специальную инструкцию, которую может проверить ваш механизм ajax.

E.g. в случае JSON:

response.getWriter().printf("{redirect:\"%s\"}", url); 
var response = fireAjaxRequestAndGetResponseAsJsonSomehow(); 

if (response.redirect) { 
    window.location = response.redirect; 
    return; 
} 

// Usual process continues here. 
Смежные вопросы