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");
        }
 
        /**

Reply via email to