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 <[email protected]> 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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to