- All Implemented Interfaces:
FacesListener,SystemEventListener,FacesWrapper<ExceptionHandler>,EventListener
The ViewExpiredExceptionHandler will suppress any ViewExpiredException and refresh the current page
by redirecting to the current URL with query string. Additionally, it will set a flash attribute indicating that the
ViewExpiredException was handled by this exception handler.
Installation
This handler must be registered by a factory as follows in faces-config.xml in order to get it to run:
<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
</factory>
In case there are multiple exception handlers, best is to register this handler as last one in the chain. For example,
when combined with FullAjaxExceptionHandler, this ordering will prevent the FullAjaxExceptionHandler
from taking over the handling of the ViewExpiredException.
<factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory</exception-handler-factory>
<exception-handler-factory>org.omnifaces.exceptionhandler.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
</factory>
Note
It's your own responsibility to make sure that the end user gets some form of feedback as to why exactly the page is
refreshed and any submitted input values are lost. In order to check whether the previous request threw a
ViewExpiredException which was handled by this exception handler, then you can use
wasViewExpired() in managed beans and
#{flash['org.omnifaces.view_expired'] eq true} in EL.
This approach will not work when the refresh in turn triggers yet another redirect elsewhere in the logic. In case
you want to retain the condition for the next request, then you need to ensure that the involved logic explicitly
triggers Flash.keep(String) in order to keep the flash attribute for the subsequent request. In the scope of
OmniFaces, this is already taken care of by Faces.redirect(String, Object...) and derivates.
- Since:
- 3.9
- Author:
- Lenny Primak
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringThe flash attribute name of a boolean value indicating that the previous request threw aViewExpiredExceptionwhich was handled by this exception handler.Fields inherited from class org.omnifaces.exceptionhandler.ExceptionSuppressor
PARAM_NAME_EXCEPTION_TYPES_TO_SUPPRESS -
Constructor Summary
ConstructorsConstructorDescriptionConstruct a new view expired exception handler around the given wrapped exception handler. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidhandleSuppressedException(FacesContext context, Throwable suppressedException) Set the flash attribute "org.omnifaces.view_expired".static booleanReturnstrueif the previous request threw aViewExpiredExceptionwhich was handled by this exception handler.Methods inherited from class org.omnifaces.exceptionhandler.ExceptionSuppressor
getExceptionTypesToSuppress, handleMethods inherited from class jakarta.faces.context.ExceptionHandlerWrapper
getHandledExceptionQueuedEvent, getHandledExceptionQueuedEvents, getRootCause, getUnhandledExceptionQueuedEvents, getWrapped, isListenerForSource, processEvent
-
Field Details
-
FLASH_ATTRIBUTE_VIEW_EXPIRED
The flash attribute name of a boolean value indicating that the previous request threw aViewExpiredExceptionwhich was handled by this exception handler.- See Also:
-
-
Constructor Details
-
ViewExpiredExceptionHandler
Construct a new view expired exception handler around the given wrapped exception handler.- Parameters:
wrapped- The wrapped exception handler.
-
-
Method Details
-
handleSuppressedException
Set the flash attribute "org.omnifaces.view_expired".- Overrides:
handleSuppressedExceptionin classExceptionSuppressor- Parameters:
context- The involved faces context.suppressedException- The suppressed exception.
-
wasViewExpired
public static boolean wasViewExpired()Returnstrueif the previous request threw aViewExpiredExceptionwhich was handled by this exception handler.- Returns:
trueif the previous request threw aViewExpiredExceptionwhich was handled by this exception handler.
-