Author: mgrigorov
Date: Mon Jul 19 15:06:57 2010
New Revision: 965525
URL: http://svn.apache.org/viewvc?rev=965525&view=rev
Log:
* Try to extract the page which rendering thrown an exception. It would be
useful when showing the information in an error page
* Make IExceptionMapper configurable by the user -
Application#newExceptionMapper()
Modified:
wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
wicket/trunk/wicket/src/main/java/org/apache/wicket/DefaultExceptionMapper.java
Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
URL:
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java?rev=965525&r1=965524&r2=965525&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Application.java Mon
Jul 19 15:06:57 2010
@@ -59,6 +59,7 @@ import org.apache.wicket.protocol.http.D
import org.apache.wicket.protocol.http.IRequestLogger;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WebSession;
+import org.apache.wicket.request.IExceptionMapper;
import org.apache.wicket.request.IRequestHandler;
import org.apache.wicket.request.IRequestMapper;
import org.apache.wicket.request.Request;
@@ -1483,9 +1484,8 @@ public abstract class Application implem
public final RequestCycle createRequestCycle(Request request, Response
response)
{
- // FIXME exception mapper should come from elsewhere
RequestCycleContext context = new RequestCycleContext(request,
response,
- getRootRequestMapper(), new DefaultExceptionMapper());
+ getRootRequestMapper(), newExceptionMapper());
RequestCycle requestCycle =
getRequestCycleProvider().get(context);
requestCycle.register(new RequestCycle.DetachCallback()
@@ -1499,6 +1499,15 @@ public abstract class Application implem
}
/**
+ * @return a mapper that knows what kind of error page to show when an
exception occurs during
+ * page rendering
+ */
+ protected IExceptionMapper newExceptionMapper()
+ {
+ return new DefaultExceptionMapper();
+ }
+
+ /**
* Initialize the application
*/
public final void initApplication()
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=965525&r1=965524&r2=965525&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 Jul 19 15:06:57 2010
@@ -20,13 +20,20 @@ import org.apache.wicket.markup.html.pag
import org.apache.wicket.protocol.http.PageExpiredException;
import org.apache.wicket.request.IExceptionMapper;
import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.request.handler.EmptyRequestHandler;
+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.mapper.StalePageException;
import org.apache.wicket.settings.IExceptionSettings;
import
org.apache.wicket.settings.IExceptionSettings.UnexpectedExceptionDisplay;
+/**
+ * If an exception is thrown when a page is being rendered this mapper will
decide which error page
+ * to show depending on the exception type and {...@link
Application#getExceptionSettings() application
+ * configuration}
+ */
public class DefaultExceptionMapper implements IExceptionMapper
{
@@ -51,9 +58,9 @@ public class DefaultExceptionMapper impl
if
(IExceptionSettings.SHOW_EXCEPTION_PAGE.equals(unexpectedExceptionDisplay))
{
- return new RenderPageRequestHandler(new
PageProvider(
- // TODO WICKET-NG How to provide the page to
ExceptionErrorPage ?!
- new ExceptionErrorPage(e, null)));
+ Page currentPage = extractCurrentPage();
+ return new RenderPageRequestHandler(new
PageProvider(new ExceptionErrorPage(e,
+ currentPage)));
}
else if
(IExceptionSettings.SHOW_INTERNAL_ERROR_PAGE.equals(unexpectedExceptionDisplay))
{
@@ -67,4 +74,24 @@ public class DefaultExceptionMapper impl
}
}
}
+
+ /**
+ * @return the page being rendered when the exception was thrown, or
{...@code null} if it cannot
+ * be extracted
+ */
+ private Page extractCurrentPage()
+ {
+ final RequestCycle requestCycle = RequestCycle.get();
+ final IRequestHandler activeRequestHandler =
requestCycle.getActiveRequestHandler();
+
+ Page currentPage = null;
+
+ if (activeRequestHandler instanceof IPageRequestHandler)
+ {
+ IPageRequestHandler pageRequestHandler =
(IPageRequestHandler)activeRequestHandler;
+ currentPage = (Page)pageRequestHandler.getPage();
+ }
+
+ return currentPage;
+ }
}