You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/08/29 01:45:57 UTC

svn commit: r690050 - in /wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket: ajaxng/AjaxRequestTarget.java ajaxng/js/wicket-ajax-ng.js protocol/http/WebResponse.java

Author: knopp
Date: Thu Aug 28 16:45:57 2008
New Revision: 690050

URL: http://svn.apache.org/viewvc?rev=690050&view=rev
Log:
redirect

Modified:
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
    wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java?rev=690050&r1=690049&r2=690050&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/AjaxRequestTarget.java Thu Aug 28 16:45:57 2008
@@ -64,8 +64,7 @@
  * it is desirable to link component update with some javascript effects.
  * <p>
  * The target provides a listener interface {@link IListener} that can be used to add code that
- * responds to various target events by adding listeners via
- * {@link #addListener(IListener)} 
+ * responds to various target events by adding listeners via {@link #addListener(IListener)}
  * 
  * @since 1.2
  * 
@@ -149,8 +148,6 @@
 
 	private static final Logger log = LoggerFactory.getLogger(AjaxRequestTarget.class);
 
-	private String redirect = null;
-
 	// whether a header contribution is being rendered
 	private boolean headerRendering = false;
 	private HtmlHeaderContainer header = null;
@@ -429,8 +426,8 @@
 	 * @param entry
 	 *            component entry to be rendered
 	 * 
-	 * @return <code>true</code> if the component was added, <code>false</code> if the
-	 *          component or some of it's parents is already in the list
+	 * @return <code>true</code> if the component was added, <code>false</code> if the component
+	 *         or some of it's parents is already in the list
 	 */
 	public boolean addComponent(ComponentEntry entry)
 	{
@@ -470,8 +467,8 @@
 	 * @param component
 	 *            component to be rendered
 	 * 
-	 * @return <code>true</code> if the component was added, <code>false</code> if the
-	 *          component or some of it's parents is already in the list
+	 * @return <code>true</code> if the component was added, <code>false</code> if the component
+	 *         or some of it's parents is already in the list
 	 */
 
 	public boolean addComponent(Component component)
@@ -910,16 +907,6 @@
 		return stringResponse.toString();
 	}
 
-	/**
-	 * 
-	 * @param redirect
-	 */
-	public void setRedirect(String redirect)
-	{
-		// TODO: Implement redirect
-		this.redirect = redirect;
-	}
-
 	private void prepareRender()
 	{
 		for (Iterator<ComponentEntry> i = entries.iterator(); i.hasNext();)
@@ -1010,49 +997,42 @@
 
 		JSONObject response = new JSONObject();
 
-		if (redirect != null)
-		{
-			response.put("redirect", redirect);
-		}
-		else
-		{
-			JSONArray components = new JSONArray();
-			response.put("components", components);
+		JSONArray components = new JSONArray();
+		response.put("components", components);
 
-			if (!entries.isEmpty())
-			{
-				prepareRender();
+		if (!entries.isEmpty())
+		{
+			prepareRender();
 
-				response.put("header", respondHeaderContribution());
+			response.put("header", respondHeaderContribution());
 
-				for (ComponentEntry entry : entries)
-				{
-					components.put(renderComponentEntry(entry));
-				}
+			for (ComponentEntry entry : entries)
+			{
+				components.put(renderComponentEntry(entry));
 			}
+		}
 
-			fireOnAfterRespondListeners(entries);
+		fireOnAfterRespondListeners(entries);
 
-			JSONArray prependJavascripts = new JSONArray();
-			response.put("prependJavascript", prependJavascripts);
+		JSONArray prependJavascripts = new JSONArray();
+		response.put("prependJavascript", prependJavascripts);
 
-			for (JavascriptEntry e : this.prependJavascripts)
-			{
-				prependJavascripts.put(renderJavascriptEntry(e));
-			}
+		for (JavascriptEntry e : this.prependJavascripts)
+		{
+			prependJavascripts.put(renderJavascriptEntry(e));
+		}
 
-			JSONArray appendJavascripts = new JSONArray();
-			response.put("appendJavascript", appendJavascripts);
+		JSONArray appendJavascripts = new JSONArray();
+		response.put("appendJavascript", appendJavascripts);
 
-			for (JavascriptEntry e : this.domReadyJavascripts)
-			{
-				appendJavascripts.put(renderJavascriptEntry(e));
-			}
+		for (JavascriptEntry e : this.domReadyJavascripts)
+		{
+			appendJavascripts.put(renderJavascriptEntry(e));
+		}
 
-			for (JavascriptEntry e : this.appendJavascripts)
-			{
-				appendJavascripts.put(renderJavascriptEntry(e));
-			}
+		for (JavascriptEntry e : this.appendJavascripts)
+		{
+			appendJavascripts.put(renderJavascriptEntry(e));
 		}
 
 		WebResponse webResponse = (WebResponse)requestCycle.getResponse();
@@ -1063,6 +1043,29 @@
 		webResponse.write(")");
 	}
 
+	/**
+	 * Renders a redirect response to the response object. This is used to send the redirect to
+	 * client outside {@link AjaxRequestTarget#respond(RequestCycle)}.
+	 * 
+	 * @param response
+	 * @param url
+	 */
+	public static void sendRedirect(WebResponse response, String url)
+	{
+		JSONObject object = new JSONObject();
+		object.put("redirect", url);
+		try
+		{
+			response.getHttpServletResponse().getWriter().write("if (false) (");
+			response.getHttpServletResponse().getWriter().write(object.toString());
+			response.getHttpServletResponse().getWriter().write(")");
+		}
+		catch (Exception e)
+		{
+			log.error("Error sending redirect", e);
+		}
+	}
+
 	private void prepareResponse(WebResponse response)
 	{
 		final Application app = Application.get();

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js?rev=690050&r1=690049&r2=690050&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/ajaxng/js/wicket-ajax-ng.js Thu Aug 28 16:45:57 2008
@@ -1884,8 +1884,19 @@
 			}
 		},
 		
+		processRedirect: function(url)
+		{
+			window.location = url;
+		},
+		
 		processResponse: function(response)
 		{
+			if (L.isString(response.redirect))
+			{
+				this.processRedirect(response.redirect);
+				this.success();
+			}
+			
 			var steps = new Array();
 		
 			this.processJavascripts(response.prependJavascript, steps);
@@ -1918,7 +1929,10 @@
 				var response = eval(responseText);
 				log.debug("RequestQueue", "Response parsed: ", response);
 								
-				this.processResponse(response);
+				if (L.isObject(response))
+				{
+					this.processResponse(response);
+				}
 			} 
 			catch (exception) 
 			{

Modified: wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java
URL: http://svn.apache.org/viewvc/wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java?rev=690050&r1=690049&r2=690050&view=diff
==============================================================================
--- wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java (original)
+++ wicket/sandbox/knopp/experimental/wicket/src/main/java/org/apache/wicket/protocol/http/WebResponse.java Thu Aug 28 16:45:57 2008
@@ -25,6 +25,7 @@
 
 import org.apache.wicket.Response;
 import org.apache.wicket.WicketRuntimeException;
+import org.apache.wicket.ajaxng.AjaxRequestTarget;
 import org.apache.wicket.util.string.AppendingStringBuffer;
 import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.time.Time;
@@ -223,9 +224,10 @@
 						 */
 						httpServletResponse.addHeader("Ajax-Location", url);
 
+						AjaxRequestTarget.sendRedirect(this, url);
 						// safari chokes on empty response. but perhaps this is
 						// not the best place?
-						httpServletResponse.getWriter().write(" ");
+						//httpServletResponse.getWriter().write(" ");
 					}
 					else
 					{