Merge branch 'master' into 
sandbox/preserve-page-parameters-and-execute-listener-interface-after-expiration


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/79ba3381
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/79ba3381
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/79ba3381

Branch: refs/heads/master
Commit: 79ba33817899b5921a1864da9fc39e5f5a97395b
Parents: 4299d74 60d3009
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Thu Jan 16 12:51:18 2014 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Thu Jan 16 12:51:18 2014 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/wicket/Page.java   |  3 +
 .../wicket/ajax/res/js/wicket-event-jquery.js   | 26 +++++-
 .../ListenerInterfaceRequestHandler.java        | 98 ++++++++++----------
 .../markup/html/form/NumberTextField.java       | 16 +++-
 .../wicket/request/cycle/RequestCycle.java      |  6 +-
 .../request/resource/PackageResource.java       |  6 +-
 .../apache/wicket/settings/PageSettings.java    |  2 +-
 .../ListenerInterfaceRequestHandlerTest.java    | 31 ++++++-
 .../markup/html/form/NumberTextFieldTest.java   | 34 ++++++-
 .../wicket/request/cycle/UrlRendererTest.java   | 11 +++
 wicket-core/src/test/js/event.js                | 20 ++++
 .../ajax/markup/html/modal/res/modal.js         | 18 ++--
 .../org/apache/wicket/request/UrlRenderer.java  |  4 +-
 .../util/resource/ResourceStreamWrapper.java    |  2 +-
 14 files changed, 203 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/79ba3381/wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
----------------------------------------------------------------------
diff --cc 
wicket-core/src/main/java/org/apache/wicket/core/request/handler/ListenerInterfaceRequestHandler.java
index 76fa264,1e24206..0ddb30b
--- 
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
@@@ -172,68 -172,62 +172,66 @@@ public class ListenerInterfaceRequestHa
                        component = null;
                }
  
-               if ((component == null && freshPage) ||
-                       (component != null && getComponent().getPage() == page))
+               if ((component == null && !freshPage) || (component != null && 
component.getPage() != page))
                {
-                       if (page instanceof Page)
-                       {
-                               // initialize the page to be able to check 
whether it is stateless
-                               ((Page)page).internalInitialize();
-                       }
-                       final boolean isStateless = page.isPageStateless();
+                       throw new WicketRuntimeException("Component '" + 
getComponentPath()
+                               + "' has been removed from page.");
+               }
+ 
+               if (page instanceof Page)
+               {
+                       // initialize the page to be able to check whether it 
is stateless
+                       ((Page)page).internalInitialize();
+               }
+               final boolean isStateless = page.isPageStateless();
+ 
+               RedirectPolicy policy = isStateless
+                       ? RedirectPolicy.NEVER_REDIRECT
+                       : RedirectPolicy.AUTO_REDIRECT;
+               final IPageProvider pageProvider = new PageProvider(page);
  
-                       RedirectPolicy policy = isStateless ? 
RedirectPolicy.NEVER_REDIRECT
-                               : RedirectPolicy.AUTO_REDIRECT;
-                       final IPageProvider pageProvider = new 
PageProvider(page);
 -              if (freshPage && (isStateless == false || component == null))
++              final boolean canCallListenerInterfaceAfterExpiry = component 
!= null
++                              ? 
component.canCallListenerInterfaceAfterExpiry()
++                              : false;
 +
-                       final boolean canCallListenerInterfaceAfterExpiry = 
component != null
-                                       ? 
component.canCallListenerInterfaceAfterExpiry()
-                                       : false;
-                       if (!canCallListenerInterfaceAfterExpiry && freshPage 
&& (isStateless == false || component == null))
++              if (!canCallListenerInterfaceAfterExpiry && freshPage && 
(isStateless == false || component == null))
+               {
+                       // A listener interface is invoked on an expired page.
+ 
+                       // If the page is stateful then we cannot assume that 
the listener interface is
+                       // invoked on its initial state (right after page 
initialization) and that its
+                       // component and/or behavior will be available. That's 
why the listener interface
+                       // should be ignored and the best we can do is to 
re-paint the newly constructed
+                       // page.
+ 
+                       if (LOG.isDebugEnabled())
                        {
-                               // A listener interface is invoked on an 
expired page.
- 
-                               // If the page is stateful then we cannot 
assume that the listener interface is
-                               // invoked on its initial state (right after 
page initialization) and that its
-                               // component and/or behavior will be available. 
That's why the listener interface
-                               // should be ignored and the best we can do is 
to re-paint the newly constructed
-                               // page.
- 
-                               if (LOG.isDebugEnabled())
-                               {
-                                       LOG.debug(
-                                               "A ListenerInterface '{}' 
assigned to '{}' is executed on an expired stateful page. "
-                                                       + "Scheduling re-create 
of the page and ignoring the listener interface...",
-                                               listenerInterface, 
getComponentPath());
-                               }
- 
-                               if (isAjax)
-                               {
-                                       policy = RedirectPolicy.ALWAYS_REDIRECT;
-                               }
- 
-                               
requestCycle.scheduleRequestHandlerAfterCurrent(new RenderPageRequestHandler(
-                                       pageProvider, policy));
-                               return;
+                               LOG.debug(
+                                       "A ListenerInterface '{}' assigned to 
'{}' is executed on an expired stateful page. "
+                                               + "Scheduling re-create of the 
page and ignoring the listener interface...",
+                                       listenerInterface, getComponentPath());
                        }
  
-                       if (isAjax == false && 
listenerInterface.isRenderPageAfterInvocation())
+                       if (isAjax)
                        {
-                               // schedule page render after current request 
handler is done. this can be
-                               // overridden during invocation of listener
-                               // method (i.e. by calling 
RequestCycle#setResponsePage)
-                               
requestCycle.scheduleRequestHandlerAfterCurrent(new RenderPageRequestHandler(
-                                       pageProvider, policy));
+                               policy = RedirectPolicy.ALWAYS_REDIRECT;
                        }
  
-                       invokeListener();
- 
+                       requestCycle.scheduleRequestHandlerAfterCurrent(new 
RenderPageRequestHandler(
+                               pageProvider, policy));
+                       return;
                }
-               else
+ 
+               if (isAjax == false && 
listenerInterface.isRenderPageAfterInvocation())
                {
-                       throw new WicketRuntimeException("Component " + 
getComponent() +
-                               " has been removed from page.");
+                       // schedule page render after current request handler 
is done. this can be
+                       // overridden during invocation of listener
+                       // method (i.e. by calling RequestCycle#setResponsePage)
+                       requestCycle.scheduleRequestHandlerAfterCurrent(new 
RenderPageRequestHandler(
+                               pageProvider, policy));
                }
+ 
+               invokeListener();
        }
  
        private void invokeListener()

http://git-wip-us.apache.org/repos/asf/wicket/blob/79ba3381/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java
----------------------------------------------------------------------
diff --cc wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java
index 8070359,19ddaa0..aa8a351
--- a/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java
+++ b/wicket-core/src/main/java/org/apache/wicket/settings/PageSettings.java
@@@ -121,29 -115,4 +121,29 @@@ public class PageSetting
        {
                this.recreateMountedPagesAfterExpiry = 
recreateMountedPagesAfterExpiry;
        }
 +
 +      /**
 +       * @return {@code true} if Wicket should execute the listener interface 
of a component
 +       *      which owner page is freshly created after expiration of the old 
one
 +       * @see #getRecreateMountedPagesAfterExpiry()
 +       * @see 
org.apache.wicket.request.component.IRequestableComponent#canCallListenerInterfaceAfterExpiry()
 +       */
 +      public boolean getCallListenerInterfaceAfterExpiry()
 +      {
 +              return recreateMountedPagesAfterExpiry && 
callListenerInterfaceAfterExpiry;
 +      }
 +
 +      /**
 +       * Sets a setting that determines whether Wicket should execute the 
listener interface of a component
 +       * which owner page is freshly created after expiration of the old one
 +       *
 +       * @param callListenerInterfaceAfterExpiry
 +       *          {@code true} if Wicket should execute the listener interface
-        * @see #setRecreateMountedPagesAfterExpiry(boolean) 
++       * @see #setRecreateMountedPagesAfterExpiry(boolean)
 +       * @see 
org.apache.wicket.request.component.IRequestableComponent#canCallListenerInterfaceAfterExpiry()
 +       */
 +      public void setCallListenerInterfaceAfterExpiry(boolean 
callListenerInterfaceAfterExpiry)
 +      {
 +              this.callListenerInterfaceAfterExpiry = 
callListenerInterfaceAfterExpiry;
 +      }
  }

Reply via email to