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;
 +	}
  }