With the default true of org.apache.wicket.settings.IPageSettings#getRecreateMountedPagesAfterExpiry() PageExpiryException is thrown when a Link on a page is clicked.
I find it very useful and in fact indispensible to rely on RecreateMountedPagesAfterExpiry especially on logout links.
But it doesn't seem to work for me in 6.4.0. I think this is because Link#getUrl() calls Component#utlFor() which requires a stateless page for this to work:
if (page.isPageStateless())
{ handler = new BookmarkableListenerInterfaceRequestHandler(provider, listener); }else
{ handler = new ListenerInterfaceRequestHandler(provider, listener); }With a stateless page a url is:
http://localhost:8080/wicket/HomePage?-1.ILinkListener-toolBar-signout
With a non stateless but bookmarkable page a url is:
http://localhost:8080/wicket/page?1-1.ILinkListener-toolBar-signout
So I guess that a stateful page cannot be recovered because after session expiry Wicket cannot find out what the page is. It is not coded in the URL.
Looking at the semantics of UrlFor(), I thought this might be a bug and I copied and changed the code in my Link subclass from
// if (page.isPageStateless()) {
to:
if (page.isBookmarkable()) {
It works as expected but I don't know whether it would break other things if implemented in Wicket.
I guess I am not the only one who needs recovery for bookmarkable pages in this way. Would it be possible to change Wicket to fix this so it becomes possible?
- is related to
-
WICKET-5521 Stateless forms does not work when RecreateMountedPagesAfterExpiry turned off
-
- Resolved
-
- relates to
-
WICKET-5084 ClassNotFoundException with Atmosphere on Bookmarkable pages
-
- Resolved
-