-Igor
Index: src/java/wicket/request/compound/DefaultExceptionResponseStrategy.java
===================================================================
--- src/java/wicket/request/compound/DefaultExceptionResponseStrategy.java
(revision 6950)
+++ src/java/wicket/request/compound/DefaultExceptionResponseStrategy.java
(working copy)
@@ -18,16 +18,14 @@
package wicket.request.compound;
import wicket.Application;
-import wicket.IPageFactory;
-import wicket.IRequestTarget;
import wicket.Page;
import wicket.RequestCycle;
import wicket.RestartResponseAtInterceptPageException;
+import wicket.RestartResponseException;
import wicket.Session;
import wicket.WicketRuntimeException;
import wicket.authorization.AuthorizationException;
import wicket.markup.html.pages.ExceptionErrorPage;
-import wicket.request.target.component.IPageRequestTarget;
import wicket.settings.IExceptionSettings;
/**
@@ -67,41 +65,39 @@
if (override != null)
{
requestCycle.setResponsePage(override);
+ requestCycle.setRedirect(true);
}
- else if(e instanceof AuthorizationException)
+ else if (e instanceof AuthorizationException)
{
- // are authorization exceptions always thrown before
the real render?
- // else we need to make a page (see below) or set it
hard to a redirect.
- Class accessDeniedPageClass =
application.getApplicationSettings().getAccessDeniedPage();
-
+ // are authorization exceptions always thrown before
the real
+ // render?
+ // else we need to make a page (see below) or set it
hard to a
+ // redirect.
+ Class accessDeniedPageClass =
application.getApplicationSettings()
+ .getAccessDeniedPage();
throw new
RestartResponseAtInterceptPageException(accessDeniedPageClass);
}
else if (settings.getUnexpectedExceptionDisplay() !=
IExceptionSettings.SHOW_NO_EXCEPTION_PAGE)
{
- Class internalErrorPageClass =
application.getApplicationSettings().getInternalErrorPage();
+ // we do not want to redirect - we want to inline the
error output
+ // and preserve the url so when the refresh button is
pressed we
+ // rerun the code that caused the error
+ requestCycle.setRedirect(false);
+
+ // figure out which error page to show
+ Class internalErrorPageClass =
application.getApplicationSettings()
+ .getInternalErrorPage();
Class responseClass = responsePage != null ?
responsePage.getClass() : null;
if (responseClass != internalErrorPageClass
&&
settings.getUnexpectedExceptionDisplay() ==
IExceptionSettings.SHOW_INTERNAL_ERROR_PAGE)
{
- // Show internal error page
- final IPageFactory pageFactory;
- IRequestTarget requestTarget =
requestCycle.getRequestTarget();
- if (requestTarget instanceof IPageRequestTarget)
- {
- pageFactory =
session.getPageFactory(((IPageRequestTarget)requestTarget)
- .getPage());
- }
- else
- {
- pageFactory = session.getPageFactory();
- }
-
requestCycle.setResponsePage(pageFactory.newPage(internalErrorPageClass));
+ throw new
RestartResponseException(internalErrorPageClass);
}
else if (responseClass != ExceptionErrorPage.class)
{
// Show full details
- requestCycle.setResponsePage(new
ExceptionErrorPage(e, responsePage));
+ throw new RestartResponseException(new
ExceptionErrorPage(e, responsePage));
}
else
{
@@ -110,17 +106,6 @@
+ internalErrorPageClass, e);
}
}
-
- // We generally want to redirect the response because we
- // were in the middle of rendering and the page may end up
- // looking like spaghetti otherwise. If responsePage == null,
- // than the Page constructor failed and we don't need to
- // redirect and this allows to reload the page when the
- // bug has been fixed.
- if (responsePage != null)
- {
- requestCycle.setRedirect(true);
- }
}
/**
------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Wicket-develop mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/wicket-develop
