| |
| Wicket uses a number of custom exceptions during the regular running of an application. We have already seen _PageExpiredException_ raised when a page version is expired. Other examples of such exceptions are _AuthorizationException_ and _RestartResponseException_. We will see them later in the next chapters. |
| All the other exceptions raised during rendering phase are handled by an implementation of _org.apache.wicket.request.IExceptionMapper_ which by default is class _org.apache.wicket.DefaultExceptionMapper_. If we are working in DEVELOPMENT mode this mapper will redirect us to a page that shows the exception stacktrace (page _ExceptionErrorPage_). On the contrary, if application is running in DEPLOYMENT mode _DefaultExceptionMapper_ will display an internal error page which by default is _org.apache.wicket.markup.html.pages.InternalErrorPage_. |
| To use a custom internal error page we can change application settings like this: |
| |
| [source,java] |
| ---- |
| getApplicationSettings().setInternalErrorPage(MyInternalErrorPage.class); |
| ---- |
| |
| We can also manually set if Wicket should display the exception with _ExceptionErrorPage_ or if we want to use the internal error page or if we don't want to display anything at all when an unexpected exception is thrown: |
| |
| [source,java] |
| ---- |
| //show default developer page |
| getExceptionSettings().setUnexpectedExceptionDisplay( ExceptionSettings.SHOW_EXCEPTION_PAGE ); |
| //show internal error page |
| getExceptionSettings().setUnexpectedExceptionDisplay( ExceptionSettings.SHOW_INTERNAL_ERROR_PAGE ); |
| //show no exception page when an unexpected exception is thrown |
| getExceptionSettings().setUnexpectedExceptionDisplay( ExceptionSettings.SHOW_NO_EXCEPTION_PAGE ); |
| ---- |
| |
| Developers can also decide to use a custom exception mapper instead of _DefaultExceptionMapper_. To do this we must override _Application_'s method _getExceptionMapperProvider_: |
| |
| [source,java] |
| ---- |
| @Override |
| public IProvider<IExceptionMapper> getExceptionMapperProvider() |
| { |
| //... |
| } |
| ---- |
| |
| The method returns an instance of _org.apache.wicket.util.IProvider_ that should return our custom exception mapper. |
| |
| === Ajax requests |
| |
| To control the behavior in Ajax requests the application may use _org.apache.wicket.settings.ExceptionSettings1. setAjaxErrorHandlingStrategy(ExceptionSettings.AjaxErrorStrategy)_. By default if an error occurs during the |
| processing of an Ajax request Wicket will render the configured error page. By configuring _org.apache.wicket.settings.ExceptionSettings. AjaxErrorStrategy2.INVOKE_FAILURE_HANDLER_ as the default strategy the application will call the JavaScript _onFailure_ callback(s) instead. |
| |