#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()