You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2014/01/16 11:54:03 UTC
[6/7] git commit: Merge branch 'master' into
sandbox/preserve-page-parameters-and-execute-listener-interface-after-expiration
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 <mg...@apache.org>
Authored: Thu Jan 16 12:51:18 2014 +0200
Committer: Martin Tzvetanov Grigorov <mg...@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;
+ }
}