|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjavax.faces.context.ExceptionHandler
javax.faces.context.ExceptionHandlerWrapper
org.omnifaces.exceptionhandler.FullAjaxExceptionHandler
public class FullAjaxExceptionHandler
This exception handler enables you to show the full error page in its entirety to the enduser in case of exceptions
during ajax requests. Refer the documentation of FullAjaxExceptionHandlerFactory
how to setup it.
This exception handler will parse the web.xml and web-fragment.xml files to find the error page
locations of the HTTP error code 500 and all declared specific exception types. Those locations need to
point to Facelets files. The location of the HTTP error code 500 or the exception type
java.lang.Throwable
is required in order to get the full ajax exception handler to work, because
there's then at least a fall back error page whenever there's no match with any of the declared specific exceptions.
So, you must at least have either
<error-page>
<error-code>500</error-code>
<location>/errors/500.xhtml</location>
</error-page>
or
<error-page> <exception-type>java.lang.Throwable</exception-type> <location>/errors/500.xhtml</location> </error-page>
Both can also, only the java.lang.Throwable
one will always get precedence over the 500
one, as per the Servlet API specification, so the 500 one would be basically superfluous.
The exception detail is available in the request scope by the standard servlet error request attributes like as in a normal synchronous error page response. You could for example show them in the error page as follows:
<ul> <li>Date/time: #{of:formatDate(now, 'yyyy-MM-dd HH:mm:ss')}</li> <li>User agent: #{header['user-agent']}</li> <li>User IP: #{request.remoteAddr}</li> <li>Request URI: #{requestScope['javax.servlet.error.request_uri']}</li> <li>Ajax request: #{facesContext.partialViewContext.ajaxRequest ? 'Yes' : 'No'}</li> <li>Status code: #{requestScope['javax.servlet.error.status_code']}</li> <li>Exception type: #{requestScope['javax.servlet.error.exception_type']}</li> <li>Exception message: #{requestScope['javax.servlet.error.message']}</li> <li>Stack trace: <pre>#{of:printStackTrace(requestScope['javax.servlet.error.exception'])}</pre> </li> </ul>
FullAjaxExceptionHandlerFactory
Constructor Summary | |
---|---|
FullAjaxExceptionHandler(javax.faces.context.ExceptionHandler wrapped)
Construct a new ajax exception handler around the given wrapped exception handler. |
Method Summary | |
---|---|
javax.faces.context.ExceptionHandler |
getWrapped()
|
void |
handle()
Handle the ajax exception as follows, only and only if the current request is an ajax request and there is at least one unhandled exception: If the exception is an instance of FacesException , then unwrap its root cause as long as it is not
an instance of FacesException . |
Methods inherited from class javax.faces.context.ExceptionHandlerWrapper |
---|
getHandledExceptionQueuedEvent, getHandledExceptionQueuedEvents, getRootCause, getUnhandledExceptionQueuedEvents, isListenerForSource, processEvent |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public FullAjaxExceptionHandler(javax.faces.context.ExceptionHandler wrapped)
wrapped
- The wrapped exception handler.Method Detail |
---|
public void handle() throws javax.faces.FacesException
FacesException
, then unwrap its root cause as long as it is not
an instance of FacesException
.
handle
in class javax.faces.context.ExceptionHandlerWrapper
javax.faces.FacesException
public javax.faces.context.ExceptionHandler getWrapped()
getWrapped
in interface javax.faces.FacesWrapper<javax.faces.context.ExceptionHandler>
getWrapped
in class javax.faces.context.ExceptionHandlerWrapper
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |