WICKET-5068 PageParameters missing from re-created Page WICKET-5070 Optionally execute Callback Behavior on Re-construction after Expiry WICKET-5001 Recovery of bookmarkable Page after Session Expiry
Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a1f86262 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a1f86262 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a1f86262 Branch: refs/heads/master Commit: a1f862629c223b675a31c4ba9fb7e07c27279090 Parents: ce702dc Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Jan 13 15:52:17 2014 +0200 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Jan 13 15:52:17 2014 +0200 ---------------------------------------------------------------------- .../src/main/java/org/apache/wicket/Component.java | 5 +++++ .../handler/ListenerInterfaceRequestHandler.java | 5 ++++- .../request/mapper/AbstractBookmarkableMapper.java | 6 ------ .../request/component/IRequestableComponent.java | 6 ++++++ .../org/apache/wicket/settings/PageSettings.java | 16 ++++++++++++++++ .../test/java/org/apache/wicket/MockComponent.java | 6 ++++++ .../core/request/mapper/PackageMapperTest.java | 4 ++-- .../markup/html/link/MountedPageLinkTest.java | 4 +--- 8 files changed, 40 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/main/java/org/apache/wicket/Component.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/Component.java b/wicket-core/src/main/java/org/apache/wicket/Component.java index e139f99..62d67ac 100644 --- a/wicket-core/src/main/java/org/apache/wicket/Component.java +++ b/wicket-core/src/main/java/org/apache/wicket/Component.java @@ -4551,4 +4551,9 @@ public abstract class Component return getBehaviors(null); } + @Override + public boolean canCallListenerInterfaceAfterExpiry() + { + return getApplication().getPageSettings().canCallListenerInterfaceAfterExpiry(); + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java index 84592d7..76fa264 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java @@ -186,7 +186,10 @@ public class ListenerInterfaceRequestHandler : RedirectPolicy.AUTO_REDIRECT; final IPageProvider pageProvider = new PageProvider(page); - if (freshPage && (isStateless == false || component == null)) + final boolean canCallListenerInterfaceAfterExpiry = component != null + ? component.canCallListenerInterfaceAfterExpiry() + : false; + if (!canCallListenerInterfaceAfterExpiry && freshPage && (isStateless == false || component == null)) { // A listener interface is invoked on an expired page. http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java index 3e86718..5074ac0 100644 --- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java +++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/AbstractBookmarkableMapper.java @@ -279,12 +279,6 @@ public abstract class AbstractBookmarkableMapper extends AbstractComponentMapper if (listenerInterface != null) { - if (pageInfo.getPageId() != null) - { - // WICKET-4594 - ignore the parsed parameters for stateful pages - pageParameters = null; - } - PageAndComponentProvider provider = new PageAndComponentProvider(pageInfo.getPageId(), pageClass, pageParameters, renderCount, componentInfo.getComponentPath()); http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestableComponent.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestableComponent.java b/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestableComponent.java index adc0c9f..bea84e5 100644 --- a/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestableComponent.java +++ b/wicket-core/src/main/java/org/apache/wicket/request/component/IRequestableComponent.java @@ -105,4 +105,10 @@ public interface IRequestableComponent * </p> */ void detach(); + + /** + * @return {@code true} if it is save to call the listener interface on this component + * when the owner page is freshly created after expiration + */ + boolean canCallListenerInterfaceAfterExpiry(); } http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java b/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java index 19ddaa0..6096d1d 100644 --- a/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java +++ b/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java @@ -45,6 +45,12 @@ public class PageSettings private boolean recreateMountedPagesAfterExpiry = true; /** + * determines whether component's listener interface can be executed + * when its owner page is freshly created after expiration + */ + private boolean canCallListenerInterfaceAfterExpiry = false; + + /** * Adds a component resolver to the list. * * @param resolver @@ -115,4 +121,14 @@ public class PageSettings { this.recreateMountedPagesAfterExpiry = recreateMountedPagesAfterExpiry; } + + public boolean canCallListenerInterfaceAfterExpiry() + { + return canCallListenerInterfaceAfterExpiry; + } + + public void setCanCallListenerInterfaceAfterExpiry(boolean canCallListenerInterfaceAfterExpiry) + { + this.canCallListenerInterfaceAfterExpiry = canCallListenerInterfaceAfterExpiry; + } } http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/test/java/org/apache/wicket/MockComponent.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/MockComponent.java b/wicket-core/src/test/java/org/apache/wicket/MockComponent.java index aafe6e9..f0046f2 100644 --- a/wicket-core/src/test/java/org/apache/wicket/MockComponent.java +++ b/wicket-core/src/test/java/org/apache/wicket/MockComponent.java @@ -137,6 +137,12 @@ public class MockComponent implements IRequestableComponent { } + @Override + public boolean canCallListenerInterfaceAfterExpiry() + { + return false; + } + public boolean canCallListenerInterface() { return true; http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java index bc2d8c4..2a4635b 100644 --- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/PackageMapperTest.java @@ -239,9 +239,9 @@ public class PackageMapperTest extends AbstractMapperTest assertEquals("foo:bar", h.getComponent().getPageRelativePath()); PageParameters p = h.getPageParameters(); - assertEquals(0, p.getIndexedCount()); + assertEquals(2, p.getIndexedCount()); - assertEquals(0, p.getNamedKeys().size()); + assertEquals(2, p.getNamedKeys().size()); } /** http://git-wip-us.apache.org/repos/asf/wicket/blob/a1f86262/wicket-core/src/test/java/org/apache/wicket/markup/html/link/MountedPageLinkTest.java ---------------------------------------------------------------------- diff --git a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/MountedPageLinkTest.java b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/MountedPageLinkTest.java index 398638c..0093571 100644 --- a/wicket-core/src/test/java/org/apache/wicket/markup/html/link/MountedPageLinkTest.java +++ b/wicket-core/src/test/java/org/apache/wicket/markup/html/link/MountedPageLinkTest.java @@ -98,9 +98,7 @@ public class MountedPageLinkTest extends WicketTestCase url = url.replace("?0", "?3"); tester.executeUrl(url); - // request parameters to callback urls should be ignored for the re-created page - // (WICKET-4594) - tester.assertContainsNot("param=value"); + tester.assertContains("param=value"); } /**
