I've my own ExceptionHandlerWrapper to manage ViewExpiredException and other errors.
The idea is to catch the error, add some error message and redirect (with a redirection, not navigation) to the index page, where the error message will be displayed.
fc.getExternalContext().getFlash().setKeepMessages(true);
Messages.addFlashError(null, "my message");
Flash flash = FacesContext.getCurrentInstance().getExternalContext().getFlash();
flash.put("foo", "hello");
fc.getExternalContext().redirect("index.xhtml");
However, flash messages are not stored (but foo is present in the flash scope).
This was working in mojarra, but I moved to myfaces 2.2.4 and it stopedd working. Any idea? (also using omnifaces 1.8.1) Thanks.