Remove the FullAjaxExceptionHandlerFactory
entry from faces-config.xml
. Right now you've basically two entirely distinct exception handler instances each doing their own thing whereby the later registered one wraps (and thus takes precedence over) the previously registered one. However the FullAjaxExceptionHandler
by itself doesn't delegate to the wrapped one once an ajax exception is encountered.
So, all you need is just this:
<factory>
<exception-handler-factory>my.package.ViewExpiredExceptionHandlerFactory</exception-handler-factory>
</factory>