You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2011/03/09 08:38:53 UTC

svn commit: r1079685 - in /wicket/trunk/wicket-core/src/main/java/org/apache/wicket: Component.java MarkupContainer.java Page.java request/handler/PageAndComponentProvider.java request/handler/PageProvider.java

Author: ivaynberg
Date: Wed Mar  9 07:38:53 2011
New Revision: 1079685

URL: http://svn.apache.org/viewvc?rev=1079685&view=rev
Log:
minimize the chance of having to call onbeforerender() on a page before invoking a listener by restricting it to cases where component is not initially found and the page is a newly created instance of a bookmarkable page.
Issue: WICKET-3493

Modified:
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageAndComponentProvider.java
    wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java?rev=1079685&r1=1079684&r2=1079685&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Component.java Wed Mar  9 07:38:53 2011
@@ -967,9 +967,11 @@ public abstract class Component
 	}
 
 	/**
+	 * THIS METHOD IS NOT PART OF THE PUBLIC API, DO NOT CALL IT
+	 * 
 	 * Used to call {@link #onInitialize()}
 	 */
-	void initialize()
+	public void internalInitialize()
 	{
 		fireInitialize();
 	}

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java?rev=1079685&r1=1079684&r2=1079685&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/MarkupContainer.java Wed Mar  9 07:38:53 2011
@@ -925,7 +925,7 @@ public abstract class MarkupContainer ex
 			page.componentAdded(child);
 
 			// initialie the component
-			child.initialize();
+			child.internalInitialize();
 		}
 
 		// if the PREPARED_FOR_RENDER flag is set, we have already called
@@ -937,13 +937,15 @@ public abstract class MarkupContainer ex
 	}
 
 	/**
-	 * Overrides {@link Component#initialize()} to call {@link Component#fireInitialize()} for
-	 * itself and for all its children.
+	 * THIS METHOD IS NOT PART OF THE PUBLIC API, DO NOT CALL IT
+	 * 
+	 * Overrides {@link Component#internalInitialize()} to call {@link Component#fireInitialize()}
+	 * for itself and for all its children.
 	 * 
 	 * @see org.apache.wicket.Component#fireInitialize()
 	 */
 	@Override
-	final void initialize()
+	public final void internalInitialize()
 	{
 		super.fireInitialize();
 		visitChildren(new IVisitor<Component, Void>()

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java?rev=1079685&r1=1079684&r2=1079685&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/Page.java Wed Mar  9 07:38:53 2011
@@ -323,7 +323,7 @@ public abstract class Page extends Marku
 		if (!getFlag(FLAG_INITIALIZED))
 		{
 			// initialize the page if not yet initialized
-			initialize();
+			internalInitialize();
 		}
 		super.internalPrepareForRender(setRenderingFlag);
 	}
@@ -1061,7 +1061,7 @@ public abstract class Page extends Marku
 		if (!getFlag(FLAG_INITIALIZED))
 		{
 			// initialize the page if not yet initialized
-			initialize();
+			internalInitialize();
 		}
 
 		if (!component.isAuto())

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageAndComponentProvider.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageAndComponentProvider.java?rev=1079685&r1=1079684&r2=1079685&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageAndComponentProvider.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageAndComponentProvider.java Wed Mar  9 07:38:53 2011
@@ -16,14 +16,15 @@
  */
 package org.apache.wicket.request.handler;
 
+import org.apache.wicket.Page;
 import org.apache.wicket.request.component.IRequestableComponent;
 import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.lang.Args;
 
 /**
- * Extension of {@link PageProvider} that is also capable of providing a Component belonging
- * to the page.
+ * Extension of {@link PageProvider} that is also capable of providing a Component belonging to the
+ * page.
  * 
  * @see PageProvider
  * 
@@ -134,15 +135,6 @@ public class PageAndComponentProvider ex
 	}
 
 	/**
-	 * @see org.apache.wicket.request.handler.PageProvider#prepareForRenderNewPage()
-	 */
-	@Override
-	protected boolean prepareForRenderNewPage()
-	{
-		return true;
-	}
-
-	/**
 	 * @see org.apache.wicket.request.handler.IPageAndComponentProvider#getComponent()
 	 */
 	public IRequestableComponent getComponent()
@@ -151,6 +143,24 @@ public class PageAndComponentProvider ex
 		{
 			IRequestablePage page = getPageInstance();
 			component = page.get(componentPath);
+			if (component == null)
+			{
+
+				/*
+				 * on stateless pages it is possible that the component may not yet exist because it
+				 * couldve been created in one of the lifecycle callbacks of this page. Lets invoke
+				 * the callbacks to give the page a chance to create the missing component.
+				 */
+
+				// make sure this page instance was just created so the page can be stateless
+				if (getPageId() == null)
+				{
+					Page p = (Page)page;
+					p.internalInitialize();
+					p.internalPrepareForRender(false);
+					component = page.get(componentPath);
+				}
+			}
 		}
 		if (component == null)
 		{

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java?rev=1079685&r1=1079684&r2=1079685&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/request/handler/PageProvider.java Wed Mar  9 07:38:53 2011
@@ -17,7 +17,6 @@
 package org.apache.wicket.request.handler;
 
 import org.apache.wicket.Application;
-import org.apache.wicket.Page;
 import org.apache.wicket.page.IPageManager;
 import org.apache.wicket.protocol.http.PageExpiredException;
 import org.apache.wicket.request.IRequestHandler;
@@ -206,15 +205,6 @@ public class PageProvider implements IPa
 		}
 	}
 
-	/**
-	 * 
-	 * @return always false
-	 */
-	protected boolean prepareForRenderNewPage()
-	{
-		return false;
-	}
-
 	protected IPageSource getPageSource()
 	{
 		if (pageSource != null)
@@ -258,10 +248,6 @@ public class PageProvider implements IPa
 			{
 				page = getPageSource().newPageInstance(pageClass, pageParameters);
 				freshCreated = true;
-				if (prepareForRenderNewPage() && page instanceof Page)
-				{
-					((Page)page).internalPrepareForRender(false);
-				}
 			}
 		}
 
@@ -333,4 +319,9 @@ public class PageProvider implements IPa
 			Application.get().getPageManager().touchPage(pageInstance);
 		}
 	}
+
+	public Integer getPageId()
+	{
+		return pageId;
+	}
 }