Re: How to correctly implement a custom error page
Thanks. Again I learned something new. On 09/07/2016 12:47 PM, Martin Grigorov wrote: > Hi, > > You can also use PageRequestHandlerTracker to get a reference to the > requested page (first handler) and to the response page (last handler). > Everything else looks good to me! > > Martin Grigorov > Wicket Training and Consulting > https://twitter.com/mtgrigorov > > On Wed, Sep 7, 2016 at 11:36 AM, Joachim Rohdewrote: > >> Hi, >> >> I need to enrich the ExceptionErrorPage with some additional information. >> Currently I have a working solution but I'm >> not sure, if this is the correct way. >> >> My first try was (in my Application-class): >> >> /** >> * Define our own exception mapper. >> */ >> @Override >> public IProvider getExceptionMapperProvider() { >> return new IProvider() { >> >> @Override >> public IExceptionMapper get() { >> return new MyCustomExceptionMapper(); >> } >> }; >> } >> >> /** >> * Our own exception mapper, so that we can display further >> information on the error page >> * in case of an exception. >> */ >> public class MyCustomExceptionMapper extends DefaultExceptionMapper { >> >> @Override >> public IRequestHandler map(Exception e) { >> return new RenderPageRequestHandler(new PageProvider(new >> MyErrorPage(e, super.extractCurrentPage(; >> } >> >> } >> >> MyErrorPage extends from ExceptionErrorPage and overwrites >> getErrorMessage(Throwable throwable). >> >> During development this works just fine but it was not feeling right. >> Therefore I proposed a patch to implement a >> hook-method (https://issues.apache.org/jira/browse/WICKET-6240) where >> Martin mentioned: >> >> "The recommended way to do this is to register custom >> IRequestCycleListener and override its #onException() method. >> If the exception is IWicketInternalException then return null, otherwise >> return RenderPageRequestHandler with a custom >> page that renders all the information you need." >> >> So, at the moment I'm having in my init-method: >> >> getRequestCycleListeners().add(new AbstractRequestCycleListener() { >> @Override >> public IRequestHandler onException(RequestCycle cycle, >> Exception ex) { >> if (ex instanceof IWicketInternalException) { >> return null; >> } else { >> Page page = null; >> >> IRequestHandler handler = >> cycle.getActiveRequestHandler(); >> >> if (handler == null) { >> handler = cycle.getRequestHandlerScheduledAfte >> rCurrent(); >> } >> >> if (handler instanceof IPageRequestHandler) { >> IPageRequestHandler pageRequestHandler = >> (IPageRequestHandler) handler; >> page = (Page) pageRequestHandler.getPage(); >> } >> >> return new RenderPageRequestHandler(new >> PageProvider(new MyErrorPage(ex, page))); >> } >> } >> >> }); >> >> The code to retrieve the page comes basically from >> DefaultExceptionMapper#extractCurrentPage(). >> My question: is this the >> way to go? Or can I simplify the code any further? >> >> Joachim >> >> - >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org >> For additional commands, e-mail: users-h...@wicket.apache.org >> >> > - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org
Re: How to correctly implement a custom error page
Hi, You can also use PageRequestHandlerTracker to get a reference to the requested page (first handler) and to the response page (last handler). Everything else looks good to me! Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Wed, Sep 7, 2016 at 11:36 AM, Joachim Rohdewrote: > Hi, > > I need to enrich the ExceptionErrorPage with some additional information. > Currently I have a working solution but I'm > not sure, if this is the correct way. > > My first try was (in my Application-class): > > /** > * Define our own exception mapper. > */ > @Override > public IProvider getExceptionMapperProvider() { > return new IProvider() { > > @Override > public IExceptionMapper get() { > return new MyCustomExceptionMapper(); > } > }; > } > > /** > * Our own exception mapper, so that we can display further > information on the error page > * in case of an exception. > */ > public class MyCustomExceptionMapper extends DefaultExceptionMapper { > > @Override > public IRequestHandler map(Exception e) { > return new RenderPageRequestHandler(new PageProvider(new > MyErrorPage(e, super.extractCurrentPage(; > } > > } > > MyErrorPage extends from ExceptionErrorPage and overwrites > getErrorMessage(Throwable throwable). > > During development this works just fine but it was not feeling right. > Therefore I proposed a patch to implement a > hook-method (https://issues.apache.org/jira/browse/WICKET-6240) where > Martin mentioned: > > "The recommended way to do this is to register custom > IRequestCycleListener and override its #onException() method. > If the exception is IWicketInternalException then return null, otherwise > return RenderPageRequestHandler with a custom > page that renders all the information you need." > > So, at the moment I'm having in my init-method: > > getRequestCycleListeners().add(new AbstractRequestCycleListener() { > @Override > public IRequestHandler onException(RequestCycle cycle, > Exception ex) { > if (ex instanceof IWicketInternalException) { > return null; > } else { > Page page = null; > > IRequestHandler handler = > cycle.getActiveRequestHandler(); > > if (handler == null) { > handler = cycle.getRequestHandlerScheduledAfte > rCurrent(); > } > > if (handler instanceof IPageRequestHandler) { > IPageRequestHandler pageRequestHandler = > (IPageRequestHandler) handler; > page = (Page) pageRequestHandler.getPage(); > } > > return new RenderPageRequestHandler(new > PageProvider(new MyErrorPage(ex, page))); > } > } > > }); > > The code to retrieve the page comes basically from > DefaultExceptionMapper#extractCurrentPage(). > My question: is this the > way to go? Or can I simplify the code any further? > > Joachim > > - > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > For additional commands, e-mail: users-h...@wicket.apache.org > >
How to correctly implement a custom error page
Hi, I need to enrich the ExceptionErrorPage with some additional information. Currently I have a working solution but I'm not sure, if this is the correct way. My first try was (in my Application-class): /** * Define our own exception mapper. */ @Override public IProvider getExceptionMapperProvider() { return new IProvider() { @Override public IExceptionMapper get() { return new MyCustomExceptionMapper(); } }; } /** * Our own exception mapper, so that we can display further information on the error page * in case of an exception. */ public class MyCustomExceptionMapper extends DefaultExceptionMapper { @Override public IRequestHandler map(Exception e) { return new RenderPageRequestHandler(new PageProvider(new MyErrorPage(e, super.extractCurrentPage(; } } MyErrorPage extends from ExceptionErrorPage and overwrites getErrorMessage(Throwable throwable). During development this works just fine but it was not feeling right. Therefore I proposed a patch to implement a hook-method (https://issues.apache.org/jira/browse/WICKET-6240) where Martin mentioned: "The recommended way to do this is to register custom IRequestCycleListener and override its #onException() method. If the exception is IWicketInternalException then return null, otherwise return RenderPageRequestHandler with a custom page that renders all the information you need." So, at the moment I'm having in my init-method: getRequestCycleListeners().add(new AbstractRequestCycleListener() { @Override public IRequestHandler onException(RequestCycle cycle, Exception ex) { if (ex instanceof IWicketInternalException) { return null; } else { Page page = null; IRequestHandler handler = cycle.getActiveRequestHandler(); if (handler == null) { handler = cycle.getRequestHandlerScheduledAfterCurrent(); } if (handler instanceof IPageRequestHandler) { IPageRequestHandler pageRequestHandler = (IPageRequestHandler) handler; page = (Page) pageRequestHandler.getPage(); } return new RenderPageRequestHandler(new PageProvider(new MyErrorPage(ex, page))); } } }); The code to retrieve the page comes basically from DefaultExceptionMapper#extractCurrentPage(). My question: is this the way to go? Or can I simplify the code any further? Joachim - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org For additional commands, e-mail: users-h...@wicket.apache.org