Мы пишем приложение с использованием Wicket, которое использует AJAX.Приложение имеет главное окно с двумя iFrames.Первый iFrame показывает страницу с картой (Google Maps).Второй iFrame показывает DataTable.
Главное окно всегда видно.Есть страницы, которые открываются в своих собственных окнах (всплывающие окна).Окна повторно используются для одной и той же страницы, например, link-A будет использовать то же всплывающее окно, если оно уже открыто для этой ссылки.
Проблема, с которой мы столкнулись, заключается в том, что, когда мы начинаем «объединять» вызовы AJAX с загрузкой новых страниц, мы начинаем получать PageExpiredException
-s для вызовов AJAX.Загрузка страниц (без AJAX) работает нормально, проблемы с AJAX-вызовами.Ниже приведен типичный сценарий:
- Войдите и загрузите главную страницу.
- Нажмите Link-A: это откроет Page-A во всплывающем окне.
- Нажмите ссылку-A 50 раз: это откроет страницу A-50 раз, используя одно и то же всплывающее окно.
- Обновите 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 (неизвестный источник)