Excellent. Thanks! On Mon, Apr 23, 2012 at 2:22 AM, Martin Grigorov <mgrigo...@apache.org>wrote:
> Hi Allen, > > This is improved in 1.5-SNAPSHOT and will be part of 1.5.6. > See https://issues.apache.org/jira/browse/WICKET-4488 and > https://issues.apache.org/jira/browse/WICKET-4441 > > On Mon, Apr 23, 2012 at 4:59 AM, Allen Gilbert <allen.gilb...@doane.edu> > wrote: > > While trying to understand what causes StalePageExceptions (using Wicket > > 1.5.4), I discovered a strange situation that can occur > > when DefaultExceptionMapper handles a StalePageException. I decided to > ping > > the mailing list before creating a JIRA issue in case I'm > misunderstanding > > intended behavior. > > > > Consider this scenario: > > > > 1) A user logs in and loads a few different pages, eventually landing on > > Page A. At this point, Page A's version is "5", e.g. /some/path/pageA?5 > > 2) The user opens a new tab and loads Page B > > 3) The user logs out (or their session times out) while on Page B > > 4) The user logs back in and interacts with Page B, performing page-level > > actions that increase the render count of the page, until Page B's > version > > is "5." At this point, a link listener url on Page B looks something > like > > /some/path/pageB?5-3.ILinkListener-someLink > > 5) The user switches back to their old Page A tab > > 6) The user clicks an action link (with a listener url > > like /some/path/pageA?5-1.ILinkListener-someLink) on Page A > > 7) Wicket throws a StalePageException because the page with version "5" > has > > a render count of 3, not 1 > > 8) At this point, the strange thing occurs: instead of rendering a new > > version of Page A, Wicket renders Page B. Thus, even though the user > > attempted to do something on Page A, they are now looking at Page B. > > > > Digging into the code, it seems this is due to the implementation of > > PageProvider.getStoredPage(int pageId). Notably, the javadoc for the > > method states, "If pageClass is specified then compares it against the > > stored instance class and returns the found instance only if they match." > > In the example, pageClass would be PageA.class, > > but storedPageInstance.getClass() would return PageB.class (the page with > > id=5 in the newest session). However, even though pageClass > > and storedPageInstance.getClass() aren't equal, the method still > > returns storedPageInstance. > > > > In this case, shouldn't getStoredPage() should return null, prompting a > > fresh instantiation of PageA.class? That way, when the user clicks the > > stale link on Page A, they'll get a fresh rendering of Page A. > > > > Thanks for your help! > > > > -Allen > > > > -- > Martin Grigorov > jWeekend > Training, Consulting, Development > http://jWeekend.com > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >