Почему запуск нескольких приложений Wicket вызывает конфликты AJAX?

#ajax #wicket #conflict

#ajax #wicket #конфликт

Вопрос:

Когда я открываю два веб-приложения Wicket в одном браузере, кажется, что возникают конфликты AJAX, поскольку я вижу полное обновление страницы вместо частичного обновления. Это верно, даже если приложения находятся на разных серверах и с разными номерами портов.

Я использую только готовый JavaScript, предоставляемый Wicket ( tabbedPanel , onTimerAutoRefresh ).

Возможно, это как-то связано с резервной функцией.

Когда открыто только одно веб-приложение, оно работает без каких-либо проблем.

У меня нет проблемы на сайте examples, поэтому я думаю, что что-то не так с конфигурацией моего приложения.

wicket-ajax.js , строка 970:

 try {
    redirectUrl = t.&etResponseHeader('Ajax-Location');
} catch (i&nore) { // mi&ht happen in older mozilla
}

// the redirect header was set, &o to new url
if (typeof(redirectUrl) != "undefined" amp;amp;
    redirectUrl != null amp;amp;
    redirectUrl != "") {
    //redirect and do a full pa&e refresh (window.location = redirectUrl);
}else{
    // do the normal ajax functionality
}
  

Когда все в порядке, в заголовке нет Ajax-Location. Когда второе веб-приложение загружается в том же браузере, следующий AJAX-запрос к первому загруженному веб-приложению получает эту строку в своем заголовке:

[Ajax-Location: .]

Комментарии:

1. Я думаю, нам понадобится больше деталей, чтобы мы могли помочь.

2. отредактирован первый раздел и добавлены дополнительные комментарии.

3. это происходит только тогда, когда используется один и тот же домен, даже если порт отличается. но когда я меняю домен, проблем не возникает. в примере проекта wicket in action «partialajax» у меня есть сообщение «Срок действия запрошенной вами страницы истек». ошибка.

4. Расположение Ajax в примере wicket таково: Ajax-Location: ?wicket:bookmarkablePa&e=:or&.apache. wicket.markup.html.pa&es. Страница expirederrorpa&e

Ответ №1:

Можете ли вы проверить, отличается ли корневой контекст ваших приложений? В противном случае у вас может возникнуть конфликт на уровне файлов cookie. Они хранятся на основе имени хоста и пути. Если контекстный путь обоих приложений равен «/», то значения файлов cookie будут перезаписаны. Откуда конфликт, который вы видите.

Комментарии:

1. действительно, ContextPath был одинаковым для двух приложений.

2. Есть ли обходной путь? Например, настройка имени файла cookie сеанса на уровне приложения?

3. Да, вы, вероятно, могли бы сделать это с помощью SessionCookieConfi&. Хотя я никогда не пробовал.

4. @bernardn SessionCookieConfi&, кажется, помогает (в моем случае: this.&etServletContext().&etSessionCookieConfi&().setName( applicationName ); в WicketApplication#init()