You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jb...@apache.org on 2007/03/05 19:02:05 UTC

svn commit: r514752 - in /incubator/wicket/branches/wicket-1.x/wicket/src: main/java/wicket/ajax/AjaxRequestTarget.java test/java/wicket/protocol/http/WebResponseTest.java

Author: jbq
Date: Mon Mar  5 10:02:04 2007
New Revision: 514752

URL: http://svn.apache.org/viewvc?view=rev&rev=514752
Log:
WICKET-313 Use standard exception handling in AjaxRequestTarget

Modified:
    incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
    incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java

Modified: incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java?view=diff&rev=514752&r1=514751&r2=514752
==============================================================================
--- incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java (original)
+++ incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java Mon Mar  5 10:02:04 2007
@@ -142,7 +142,7 @@
 	 * 
 	 * @author Igor Vaynberg (ivaynberg)
 	 */
-	private final class EncodingResponse extends Response
+	private final class EncodingResponse extends WebResponse
 	{
 		private final AppendingStringBuffer buffer = new AppendingStringBuffer(256);
 
@@ -157,7 +157,9 @@
 		 */
 		public EncodingResponse(Response originalResponse)
 		{
+			super(((WebResponse)originalResponse).getHttpServletResponse());
 			this.originalResponse = originalResponse;
+			setAjax(true);
 		}
 
 		/**
@@ -439,8 +441,6 @@
 	 */
 	public final void respond(final RequestCycle requestCycle)
 	{
-		try
-		{
 			final Application app = Application.get();
 
 			// Determine encoding
@@ -461,6 +461,7 @@
 			response.write("\"?>");
 			response.write("<ajax-response>");
 
+			// invoke onbeforerespond event on listeners
 			fireOnBeforeRespondListeners();
 
 			// normal behavior
@@ -483,17 +484,7 @@
 				respondInvocation(response, js);
 			}
 
-
 			response.write("</ajax-response>");
-		}
-		catch (RuntimeException ex)
-		{
-			// log the error but output nothing in the response, parse
-			// failure
-			// of response will cause any javascript failureHandler to be
-			// invoked
-			LOG.error("Error while responding to an AJAX request: " + toString(), ex);
-		}
 	}
 
 	private void fireOnBeforeRespondListeners()
@@ -633,7 +624,6 @@
 		return str.replaceAll("]", "]^");
 	}
 
-
 	/**
 	 * @return name of encoding used to possibly encode the contents of the
 	 *         CDATA blocks
@@ -700,6 +690,7 @@
 		page.startComponentRender(component);
 		component.renderComponent();
 
+		// render any associated headers of the component
 		respondHeaderContribution(response, component);
 
 		page.endComponentRender(component);
@@ -977,4 +968,4 @@
 
 		encodingBodyResponse.reset();
 	}
-}
\ No newline at end of file
+}

Modified: incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java
URL: http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java?view=diff&rev=514752&r1=514751&r2=514752
==============================================================================
--- incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java (original)
+++ incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java Mon Mar  5 10:02:04 2007
@@ -18,6 +18,13 @@
 
 import junit.framework.TestCase;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import wicket.ajax.AjaxEventBehavior;
+import wicket.ajax.markup.html.AjaxLink;
+import wicket.util.tester.WicketTester;
+
 /**
  * 
  * 
@@ -25,6 +32,8 @@
  */
 public class WebResponseTest extends TestCase
 {
+	private static final Log log = LogFactory.getLog(WebResponseTest.class);
+
 	/**
 	 * Test that redirect works correctly when not using ajax
 	 */
@@ -54,5 +63,37 @@
 
 		assertNull(mockResponse.getRedirectLocation());
 		assertTrue(mockResponse.containsHeader("Ajax-Location"));
+	}
+
+	public void testErrorPage()
+	{
+		WicketTester tester = new WicketTester();
+		tester.startPage(TestPage.class);
+		AjaxLink link = (AjaxLink)tester.getComponentFromLastRenderedPage("link");
+		
+		// Cannot use executeAjaxEvent or onClick because WicketTester creates an AjaxRequestTarget from scratch
+		//tester.executeAjaxEvent(link, "onclick");
+		//tester.clickLink("link");
+
+		// FIXME should not be needed
+		tester.createRequestCycle();
+
+		// Invoke the call back URL of the ajax event behavior
+		String callbackUrl = ((AjaxEventBehavior)link.getBehaviors().get(0)).getCallbackUrl().toString();
+		tester.setupRequestAndResponse();
+		// Fake an Ajax request
+		((MockHttpServletRequest)tester.getServletRequest()).addHeader("Wicket-Ajax", "Yes");
+		tester.getServletRequest().setURL(callbackUrl);
+
+		// Do not call tester.processRequestCycle() because it throws an exception when getting an error page
+		WebRequestCycle cycle = tester.createRequestCycle();
+		cycle.request();
+
+		assertNull(((MockHttpServletResponse)tester.getWicketResponse().getHttpServletResponse()).getRedirectLocation());
+		String ajaxLocation = ((MockHttpServletResponse)tester.getWicketResponse().getHttpServletResponse()).getHeader("Ajax-Location");
+		log.debug(ajaxLocation);
+		assertNotNull(ajaxLocation);
+
+		tester.destroy();
 	}
 }