-
Available since OmniFaces 1.0
The FacesExceptionFilter will solve 2 problems with exceptions thrown in Faces methods.
- Mojarra's
FacesFileNotFoundExceptionneeds to be interpreted as 404. - Root cause needs to be unwrapped from
FacesExceptionandELExceptionto utilize standard Servlet API error page handling.
Noted should be that this filter won't run on exceptions thrown during ajax requests. To handle them using web.xml configured error pages, use FullAjaxExceptionHandler.
Since version 3.2, the FacesExceptionFilter also logs exceptions with an UUID and IP via the logException(HttpServletRequest, Throwable, String, String, Object...) method. The UUID is in turn available in EL by #{requestScope['org.omnifaces.exception_uuid']}.
Installation
To get it to run, map this filter on an <url-pattern> of /* in web.xml.
<filter>
<filter-name>facesExceptionFilter</filter-name>
<filter-class>org.omnifaces.filter.FacesExceptionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>facesExceptionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Note that since OmniFaces 4.5, the FullAjaxExceptionHandler will automatically register the FacesExceptionFilter on its default URL pattern of /* when it is absent in web.xml, so you do not need to explicitly register it then.
Error pages
Please refer the "Error pages" section of the FullAjaxExceptionHandler javadoc for recommended error page configuration.
Configuration
Please refer the "Configuration" section of the FullAjaxExceptionHandler javadoc for available context parameters.
Customizing FacesExceptionFilter
If more fine grained control is desired for logging the exception, then the developer can opt to extend this FacesExceptionFilter and override one or more of the following protected methods:
Demo
The FacesExceptionFilter is also
configured
on this showcase application. To see the proper handling of 404 yourself, try entering a random URL matching
the *.xhtml URL pattern of the FacesServlet on this showcase web application. For
example, thisdoesnotexist.xhtml. To see the proper handling of
FacesException yourself, invoke the "normal request" buttons on the
FullAjaxExceptionHandler
showcase page. Without the filter, the RuntimeException and SQLException would end
up in an generic HTTP 500 error page instead of the one specific to the exception.