You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jc...@apache.org on 2008/05/08 00:26:46 UTC

svn commit: r654306 - in /wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket: ajax/AjaxRequestTarget.java markup/html/tree/AbstractTree.java

Author: jcompagner
Date: Wed May  7 15:26:45 2008
New Revision: 654306

URL: http://svn.apache.org/viewvc?rev=654306&view=rev
Log:
WICKET-1366 java.lang.IllegalStateException: No Page found for component" when collapsing nodes in a LinkTree (from 1.4 matej cant do these things him self)

Modified:
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
    wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java

Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java?rev=654306&r1=654305&r2=654306&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java (original)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/ajax/AjaxRequestTarget.java Wed May  7 15:26:45 2008
@@ -20,11 +20,13 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.Map.Entry;
 
 import org.apache.wicket.Application;
@@ -481,10 +483,48 @@
 	}
 
 	/**
+	 * Components can implement this interface to get a notification when AjaxRequestTarget begins
+	 * to respond. This can be used to postpone adding components to AjaxRequestTarget until the
+	 * response begins.
+	 * 
+	 * @author Matej Knopp
+	 */
+	public static interface ITargetRespondListener
+	{
+		/**
+		 * Invoked when AjaxRequestTarget is about the respond.
+		 * 
+		 * @param target
+		 */
+		public void onTargetRespond(AjaxRequestTarget target);
+	};
+
+	private final Set respondListeners = new HashSet();
+
+	/**
+	 * Register the given respond listener. The listener's
+	 * {@link ITargetRespondListener#onTargetRespond(AjaxRequestTarget)} method will be invoked when
+	 * the {@link AjaxRequestTarget} starts to respond.
+	 * 
+	 * @param listener
+	 */
+	public void registerRespondListener(ITargetRespondListener listener)
+	{
+		respondListeners.add(listener);
+	}
+
+	/**
 	 * @see org.apache.wicket.IRequestTarget#respond(org.apache.wicket.RequestCycle)
 	 */
 	public final void respond(final RequestCycle requestCycle)
 	{
+		Iterator it = respondListeners.iterator();
+		while (it.hasNext())
+		{
+			ITargetRespondListener listener = (ITargetRespondListener)it.next();
+			listener.onTargetRespond(this);
+		}
+
 		final Application app = Application.get();
 
 		// Determine encoding
@@ -509,7 +549,7 @@
 		fireOnBeforeRespondListeners();
 
 		// normal behavior
-		Iterator it = prependJavascripts.iterator();
+		it = prependJavascripts.iterator();
 		while (it.hasNext())
 		{
 			String js = (String)it.next();

Modified: wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java?rev=654306&r1=654305&r2=654306&view=diff
==============================================================================
--- wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java (original)
+++ wicket/branches/wicket-1.3.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/markup/html/tree/AbstractTree.java Wed May  7 15:26:45 2008
@@ -53,7 +53,7 @@
  * 
  * @author Matej Knopp
  */
-public abstract class AbstractTree extends Panel implements ITreeStateListener, TreeModelListener
+public abstract class AbstractTree extends Panel implements ITreeStateListener, TreeModelListener, AjaxRequestTarget.ITargetRespondListener
 {
 
 	/**
@@ -880,23 +880,8 @@
 		target.addComponent(component);
 	}
 
-	/**
-	 * Updates the changed portions of the tree using given AjaxRequestTarget. Call this method if
-	 * you modified the tree model during an ajax request target and you want to partially update
-	 * the component on page. Make sure that the tree model has fired the proper listener functions.
-	 * <p>
-	 * <b>You can only call this method once in a request.</b>
-	 * 
-	 * @param target
-	 *            Ajax request target used to send the update to the page
-	 */
-	public final void updateTree(final AjaxRequestTarget target)
+	public void onTargetRespond(AjaxRequestTarget target)
 	{
-		if (target == null)
-		{
-			return;
-		}
-
 		// check whether the model hasn't changed
 		checkModel();
 
@@ -992,6 +977,26 @@
 			updated();
 		}
 	}
+	
+	/**
+	 * Updates the changed portions of the tree using given AjaxRequestTarget. Call this method if
+	 * you modified the tree model during an ajax request target and you want to partially update
+	 * the component on page. Make sure that the tree model has fired the proper listener functions.
+	 * <p>
+	 * <b>You can only call this method once in a request.</b>
+	 * 
+	 * @param target
+	 *            Ajax request target used to send the update to the page
+	 */
+	public final void updateTree(final AjaxRequestTarget target)
+	{
+		if (target == null)
+		{
+			return;
+		}
+
+		target.registerRespondListener(this);
+	}
 
 	/**
 	 * Returns whether the given node is expanded.