You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2010/09/20 22:07:29 UTC

svn commit: r999095 - /wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java

Author: pete
Date: Mon Sep 20 20:07:29 2010
New Revision: 999095

URL: http://svn.apache.org/viewvc?rev=999095&view=rev
Log:
WICKET-3058: In case of ajax force DefaultExceptionMapper to do a full redirect to the error page. Additionally, fix lookup of current page in case of ajax.

Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java?rev=999095&r1=999094&r2=999095&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java Mon Sep 20 20:07:29 2010
@@ -26,6 +26,7 @@ import org.apache.wicket.request.handler
 import org.apache.wicket.request.handler.IPageRequestHandler;
 import org.apache.wicket.request.handler.PageProvider;
 import org.apache.wicket.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.handler.ErrorCodeResponseHandler;
 import org.apache.wicket.request.mapper.StalePageException;
 import org.apache.wicket.settings.IExceptionSettings;
@@ -135,7 +136,22 @@ public class DefaultExceptionMapper impl
 
 	private RenderPageRequestHandler createPageRequestHandler(PageProvider pageProvider)
 	{
-		return new RenderPageRequestHandler(pageProvider, redirectPolicy);
+		RequestCycle requestCycle = RequestCycle.get();
+
+		if (requestCycle == null)
+			throw new IllegalStateException("there is no current request cycle attached to this thread");
+
+		RenderPageRequestHandler.RedirectPolicy redirect = redirectPolicy;
+
+		// in case of ajax we must redirect to show the error page
+		if (requestCycle.getRequest() instanceof WebRequest)
+		{
+			WebRequest webRequest = (WebRequest)requestCycle.getRequest();
+
+			if(webRequest.isAjax())
+				redirect = RenderPageRequestHandler.RedirectPolicy.ALWAYS_REDIRECT;
+		}
+		return new RenderPageRequestHandler(pageProvider, redirect);
 	}
 
 	/**
@@ -145,16 +161,17 @@ public class DefaultExceptionMapper impl
 	private Page extractCurrentPage()
 	{
 		final RequestCycle requestCycle = RequestCycle.get();
-		final IRequestHandler activeRequestHandler = requestCycle.getActiveRequestHandler();
 
-		Page currentPage = null;
+		IRequestHandler handler = requestCycle.getActiveRequestHandler();
 
-		if (activeRequestHandler instanceof IPageRequestHandler)
+		if(handler == null)
+			handler = requestCycle.getRequestHandlerScheduledAfterCurrent();
+
+		if (handler instanceof IPageRequestHandler)
 		{
-			IPageRequestHandler pageRequestHandler = (IPageRequestHandler)activeRequestHandler;
-			currentPage = (Page)pageRequestHandler.getPage();
+			IPageRequestHandler pageRequestHandler = (IPageRequestHandler)handler;
+			return (Page)pageRequestHandler.getPage();
 		}
-
-		return currentPage;
+		return null;
 	}
 }