Wicket - Получение PageExpiredException при вызовах AJAX.Обычные страницы работают просто отлично - PullRequest
1 голос
/ 11 мая 2011

Мы пишем приложение с использованием Wicket, которое использует AJAX.Приложение имеет главное окно с двумя iFrames.Первый iFrame показывает страницу с картой (Google Maps).Второй iFrame показывает DataTable.

Главное окно всегда видно.Есть страницы, которые открываются в своих собственных окнах (всплывающие окна).Окна повторно используются для одной и той же страницы, например, link-A будет использовать то же всплывающее окно, если оно уже открыто для этой ссылки.

Проблема, с которой мы столкнулись, заключается в том, что, когда мы начинаем «объединять» вызовы AJAX с загрузкой новых страниц, мы начинаем получать PageExpiredException -s для вызовов AJAX.Загрузка страниц (без AJAX) работает нормально, проблемы с AJAX-вызовами.Ниже приведен типичный сценарий:

  1. Войдите и загрузите главную страницу.
  2. Нажмите Link-A: это откроет Page-A во всплывающем окне.
  3. Нажмите ссылку-A 50 раз: это откроет страницу A-50 раз, используя одно и то же всплывающее окно.
  4. Обновите DataTable в главном окне, используя AJAX: это выдаст a PageExpiredException.

Все это может произойти через одну минуту после входа в систему (новый сеанс), то есть сеанс все еще действителен.

Мы не знаем точно, в чем проблема, но нам удалось «отсрочить» получение этого исключения, увеличив значение maxSizePerPageSession в DefaultPageManagerProvider.Глядя на исходный код Wicket, в конце концов это значение используется DataStore / PageWindowManager.

Мы не думаем, что это лучшее решение, и мы хотели бы понять, в чем проблема, чтобы мы могли решить ее лучше.

Мы используем Wicket 1.5-RC2.

Это трассировка стека:

org.apache.wicket.protocol.http.PageExpiredException: страница просрочена.в org.apache.wicket.request.handler.PageProvider.getPageInstance (PageProvider.java:164) в org.apache.wicket.request.handler.ListenerInterfaceRequestHandler.getPage (ListenerInterfaceRequestHandler.java:89) в org..handler.ListenerInterfaceRequestHandler.respond (ListenerInterfaceRequestHandler.java:141) по адресу org.apache.wicket.request.cycle.RequestCycle $ HandlerExecutor.respond (RequestCycle.java:706) по адресу org.apache.wicket.reexckStaReta..java: 63) в org.apache.wicket.request.cycle.RequestCycle.processRequest (RequestCycle.java:212) в org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach (RequestCycle.java:253) в org.apache.wicket.protocol.http.WicketFilter.processRequest (WicketFilter.java:138) в org.apache.wicket.protocol.http.WicketFilter.doFilter (WicketFilter.java:194) в org.apache.catalina.core.Ahappil.internalDoFilter (ApplicationFilterChain.java:244) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:240) в org.apache.catalina.core.StandardContextValve.invog1 atg (стандартный).apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:164) при org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:100) в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java: 541) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:383) в org.apache.coy.http11.Http11AprProcessor.process (Http11AprProcessor.java:284) в org.apache.coyote.http11.Http11AprProtocol $ Http11ConnectionHandler.process (Http11AprProtocol.java:322)в org.apache.tomcat.util.net.AprEndpoint $ SocketProcessor.run (AprEndpoint.java:1684) в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $выполнить (неизвестный источник) на java.lang.Thread.run (неизвестный источник)

Ответы [ 3 ]

0 голосов
/ 13 мая 2011

Сохранение страницы «живой», как предположил Мартин, не так просто, есть карта, которую мы не можем перезагрузить (проблемы с лицензированием). Дальнейшее тестирование показывает, что мы получаем исключение PageExpiredException, просто обновляя некоторые компоненты главной страницы несколько раз. Главная страница обновляет некоторые компоненты (AJAX) каждые 5 секунд. Через некоторое время приложение вылетает из-за исключения PageExpiredException. Я полагаю, что эта проблема может быть связана с этой проблемой: https://issues.apache.org/jira/browse/WICKET-3667. Любое решение?

Спасибо

Маурисио Лопес-Сото

0 голосов
/ 29 октября 2011

Я тоже страдаю от этой проблемы. Я не знаю ответа на эту проблему, но я только что создал проблему Wicket JIRA: https://issues.apache.org/jira/browse/WICKET-4186 Давайте отследим прогресс там.

0 голосов
/ 12 мая 2011

Это максимальный размер окна файла для этой сессии http.После достижения этого Wicket начинает переопределять самую старую версию страницы.В какой-то момент этот порог достигается, и страница с версией 1 (начальная страница) удаляется, и вместо нее пишется страница с версией N.Позже вызов Ajax пытается найти страницу, содержащую компонент с этим поведением ajax, и этот поиск завершается неудачей.

Другое решение состоит в том, чтобы поддерживать версию «живой», периодически проверяя страницу, например, с помощью AjaxSelfUpdatingTimerBehavior.

...