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


Reply via email to