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 2010/08/21 00:02:49 UTC

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

Author: ivaynberg
Date: Fri Aug 20 22:02:49 2010
New Revision: 987648

URL: http://svn.apache.org/viewvc?rev=987648&view=rev
Log:
wicket should keep the url of a page that caused a runtime error
Issue: WICKET-3005

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=987648&r1=987647&r2=987648&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 Fri Aug 20 22:02:49 2010
@@ -41,22 +41,48 @@ public class DefaultExceptionMapper impl
 {
 	private static final Logger logger = LoggerFactory.getLogger(DefaultExceptionMapper.class);
 
+	// default policy is to not change the URL in the address bar of the browser:
+	// - the url syntax eventually gives the user some indication of the error
+	// - the user can hit refresh in the browser to retry loading the page
+	private RenderPageRequestHandler.RedirectPolicy redirectPolicy = RenderPageRequestHandler.RedirectPolicy.NEVER_REDIRECT;
+
+	/**
+	 * get the redirect policy in case of error (controls if the URL changes in case of displaying an error)
+	 *
+	 * @return redirect policy
+	 */
+	public RenderPageRequestHandler.RedirectPolicy getRedirectPolicy()
+	{
+		return redirectPolicy;
+	}
+
+	/**
+	 * set the redirect policy in case of error (you can control if the URL changes in case of displaying an error)
+	 *
+	 * @param redirectPolicy redirection policy
+	 */
+	public void setRedirectPolicy(RenderPageRequestHandler.RedirectPolicy redirectPolicy)
+	{
+		this.redirectPolicy = redirectPolicy;
+	}
+
 	public IRequestHandler map(Exception e)
 	{
 		if (e instanceof StalePageException)
 		{
 			// If the page was stale, just rerender it
+			// (the url should always be updated by an redirect in that case)
 			return new RenderPageRequestHandler(new PageProvider(((StalePageException)e).getPage()));
 		}
 		else if (e instanceof PageExpiredException)
 		{
-			return new RenderPageRequestHandler(new PageProvider(Application.get()
+			return createPageRequestHandler(new PageProvider(Application.get()
 				.getApplicationSettings()
 				.getPageExpiredErrorPage()));
 		}
 		else if (e instanceof AuthorizationException)
 		{
-			return new RenderPageRequestHandler(new PageProvider(Application.get()
+			return createPageRequestHandler(new PageProvider(Application.get()
 				.getApplicationSettings()
 				.getAccessDeniedPage()));
 		}
@@ -71,12 +97,11 @@ public class DefaultExceptionMapper impl
 			if (IExceptionSettings.SHOW_EXCEPTION_PAGE.equals(unexpectedExceptionDisplay))
 			{
 				Page currentPage = extractCurrentPage();
-				return new RenderPageRequestHandler(new PageProvider(new ExceptionErrorPage(e,
-					currentPage)));
+				return createPageRequestHandler(new PageProvider(new ExceptionErrorPage(e,	currentPage)));
 			}
 			else if (IExceptionSettings.SHOW_INTERNAL_ERROR_PAGE.equals(unexpectedExceptionDisplay))
 			{
-				return new RenderPageRequestHandler(new PageProvider(
+				return createPageRequestHandler(new PageProvider(
 					application.getApplicationSettings().getInternalErrorPage()));
 			}
 			else
@@ -87,6 +112,11 @@ public class DefaultExceptionMapper impl
 		}
 	}
 
+	private RenderPageRequestHandler createPageRequestHandler(PageProvider pageProvider)
+	{
+		return new RenderPageRequestHandler(pageProvider, redirectPolicy);
+	}
+
 	/**
 	 * @return the page being rendered when the exception was thrown, or {@code null} if it cannot
 	 *         be extracted