I think I found my answer here: https://cwiki.apache.org/confluence/display/WICKET/Page+Storage
I'll grab the Wicket sources tomorrow and hook my IntelliJ IDEA debugger to the DiskDataStore and work it backwards to see what happens. Stay tuned... ;) Have a great day, Paul Bors > On Sep 25, 2013, at 5:59 PM, Paul Bors <p...@bors.ws> wrote: > > Hey guys, > > Just wondering what could be the cause of the many page expired exceptions I > am running into with this webapp whenever the user changes tabs and then > selects the browser’s “Back” button or whenever the user downloads a resource > via a button and the form is being submitted a second time. > > My first guess is that the page might have issues with its stateless flags > but help is welcomed as I’m still new to Wicket 6.x. > > If needed I can create a quick-start. > > The following is an example of the log right after the button has been hit a > second time to submit the form: > > DEBUG: 09/25 17:35:40.954: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.955: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.955: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.956: CompoundRequestMapper: One compatible mapper found > for URL 'wicket/page?53-1.IFormSubmitListener-exportForm' -> 'Mapper: > org.apache.wicket.core.request.mapper.PageInstanceMapper; Score: 2147483647' > DEBUG: 09/25 17:35:40.956: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.956: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > attempting to acquire lock to page with id '53' > DEBUG: 09/25 17:35:40.956: PageAccessSynchronizer: http-thread-pool-5311(4) > acquired lock to page 53 > DEBUG: 09/25 17:35:40.957: DiskDataStore: Removing data for pages in session > with id '702b17085b39e8a599d07e81df51' > DEBUG: 09/25 17:35:40.960: DiskDataStore: Returning data(null) for page with > id '53' in session with id '702b17085b39e8a599d07e81df51' > DEBUG: 09/25 17:35:40.960: AsynchronousDataStore: Returning the data of a > stored entry with sessionId '702b17085b39e8a599d07e81df51' and pageId '53' > DEBUG: 09/25 17:35:40.961: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > released lock to page with id '53' > DEBUG: 09/25 17:35:40.961: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > notifying blocked threads > DEBUG: 09/25 17:35:40.961: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.964: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > attempting to acquire lock to page with id '55' > DEBUG: 09/25 17:35:40.964: PageAccessSynchronizer: http-thread-pool-5311(4) > acquired lock to page 55 > DEBUG: 09/25 17:35:40.966: MarkupContainer: Add homePageLink to [Page class = > org.apache.wicket.markup.html.pages.PageExpiredErrorPage, id = 55, render > count = 0] > DEBUG: 09/25 17:35:40.966: Component: Begin render [Page class = > org.apache.wicket.markup.html.pages.PageExpiredErrorPage, id = 55, render > count = 1] > DEBUG: 09/25 17:35:40.967: MarkupContainer: Add _header_0 to [Page class = > org.apache.wicket.markup.html.pages.PageExpiredErrorPage, id = 55, render > count = 1] > DEBUG: 09/25 17:35:40.967: Component: Begin render [HtmlHeaderContainer > [Component id = _header_0]] > DEBUG: 09/25 17:35:40.967: Component: renderHead: [BookmarkablePageLink > [Component id = homePageLink]] > DEBUG: 09/25 17:35:40.967: Component: renderHead: [HtmlHeaderContainer > [Component id = _header_0]] > DEBUG: 09/25 17:35:40.967: Component: renderHead: [PageExpiredErrorPage > [Component id = 55]] > DEBUG: 09/25 17:35:40.968: Component: End render [HtmlHeaderContainer > [Component id = _header_0]] > DEBUG: 09/25 17:35:40.968: Component: Begin render [BookmarkablePageLink > [Component id = homePageLink]] > DEBUG: 09/25 17:35:40.969: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.970: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.970: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.970: ServletWebRequest: Calculating context relative > path from: context path '', filterPrefix 'app/', uri '/app/wicket/page' > DEBUG: 09/25 17:35:40.971: Component: End render [BookmarkablePageLink > [Component id = homePageLink]] > DEBUG: 09/25 17:35:40.971: Component: End render [Page class = > org.apache.wicket.markup.html.pages.PageExpiredErrorPage, id = 55, render > count = 1] > DEBUG: 09/25 17:35:40.971: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > attempting to acquire lock to page with id '53' > DEBUG: 09/25 17:35:40.971: PageAccessSynchronizer: http-thread-pool-5311(4) > acquired lock to page 53 > DEBUG: 09/25 17:35:40.972: DiskDataStore: Returning data(null) for page with > id '53' in session with id '702b17085b39e8a599d07e81df51' > DEBUG: 09/25 17:35:40.972: AsynchronousDataStore: Returning the data of a > stored entry with sessionId '702b17085b39e8a599d07e81df51' and pageId '53' > DEBUG: 09/25 17:35:40.972: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > released lock to page with id '53' > DEBUG: 09/25 17:35:40.972: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > notifying blocked threads > DEBUG: 09/25 17:35:40.972: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > attempting to acquire lock to page with id '53' > DEBUG: 09/25 17:35:40.972: PageAccessSynchronizer: http-thread-pool-5311(4) > acquired lock to page 53 > DEBUG: 09/25 17:35:40.973: DiskDataStore: Returning data(null) for page with > id '53' in session with id '702b17085b39e8a599d07e81df51' > DEBUG: 09/25 17:35:40.973: AsynchronousDataStore: Returning the data of a > stored entry with sessionId '702b17085b39e8a599d07e81df51' and pageId '53' > DEBUG: 09/25 17:35:40.973: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > released lock to page with id '53' > DEBUG: 09/25 17:35:40.973: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > notifying blocked threads > DEBUG: 09/25 17:35:40.973: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > attempting to acquire lock to page with id '53' > DEBUG: 09/25 17:35:40.973: PageAccessSynchronizer: http-thread-pool-5311(4) > acquired lock to page 53 > DEBUG: 09/25 17:35:40.974: DiskDataStore: Returning data(null) for page with > id '53' in session with id '702b17085b39e8a599d07e81df51' > DEBUG: 09/25 17:35:40.974: AsynchronousDataStore: Returning the data of a > stored entry with sessionId '702b17085b39e8a599d07e81df51' and pageId '53' > DEBUG: 09/25 17:35:40.974: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > released lock to page with id '53' > DEBUG: 09/25 17:35:40.974: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > notifying blocked threads > DEBUG: 09/25 17:35:40.974: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > attempting to acquire lock to page with id '53' > DEBUG: 09/25 17:35:40.974: PageAccessSynchronizer: http-thread-pool-5311(4) > acquired lock to page 53 > DEBUG: 09/25 17:35:40.975: DiskDataStore: Returning data(null) for page with > id '53' in session with id '702b17085b39e8a599d07e81df51' > DEBUG: 09/25 17:35:40.975: AsynchronousDataStore: Returning the data of a > stored entry with sessionId '702b17085b39e8a599d07e81df51' and pageId '53' > DEBUG: 09/25 17:35:40.975: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > released lock to page with id '53' > DEBUG: 09/25 17:35:40.975: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > notifying blocked threads > DEBUG: 09/25 17:35:40.975: Page: ending request for page [Page class = > org.apache.wicket.markup.html.pages.PageExpiredErrorPage, id = 55, render > count = 1], request > org.apache.wicket.protocol.http.servlet.ServletWebRequest@5b454b > DEBUG: 09/25 17:35:40.975: Page: ending request for page [Page class = > org.apache.wicket.markup.html.pages.PageExpiredErrorPage, id = 55, render > count = 1], request > org.apache.wicket.protocol.http.servlet.ServletWebRequest@5b454b > DEBUG: 09/25 17:35:40.976: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > released lock to page with id '55' > DEBUG: 09/25 17:35:40.976: PageAccessSynchronizer: 'http-thread-pool-5311(4)' > notifying blocked threads