The ViewExpiredException
is being handled by a redirect to the login screen. The problem is that the exception is still logged, and the customer would strongly like to have the server.log
exception-free.
While it may be a questionable requirement in this case, I still have to make it happen. We use Mojarra and deploy on JBoss EAP 5.1
The MyFaces approach does not help as I obviously cannot wrap the MyFacesServlet
using Mojarra
I could not apply the advice given in the JBoss JSF guide to wrap the Faces servlet as I cannot find the jsf-integration-deployer-jboss-beans.xml
anywhere.
I cannot get the approach proposed by Ed Burns to work either. I guess the reason is that it is targeted at JSF2 for I cannot find the javax.faces.context.ExceptionHandlerFactory
in my jars.
Making the matter worse, I am quite new to JSF, so I have to rely on detailed guidance, in search of which I have found the above approaches but failed to apply them.
Thank you
That article is indeed targeted on JSF 2.x. JSF 1.x does not have any exception handling facility.
Just catch and redirect yourself instead of letting the container do. A filter is a sensible place for this:
try {
chain.doFilter(request, response);
} catch (ServletException e) {
if (e.getRootCause() instanceof ViewExpiredException) {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect(req.getContextPath() + "/errors/session-expired.jsf");
} else {
throw e;
}
}
Map this in web.xml
on the servlet name of the FacesServlet
to get it to run.