Hi,

I am trying to write some general way to handle application errors with JSF.
I understand application error as error after that user redirected to
some error page.

In my implementation application error is FacesMessage with SEVERITY_FATAL.
I have wrote ApplicationErrorsSupervisor, see code below.

But after redirecting to errors.faces all messages are discarded. And
therefore user doesn't see his fatal error. How can I using JSF add
all messages to view to redirect?

public class ApplicationErrorsSupervisor implements PhaseListener {
 public void afterPhase(PhaseEvent event) {}

 public void beforePhase(PhaseEvent event) {
   FacesContext context = FacesContext.getCurrentInstance();
   String viewId = context.getViewRoot().getViewId();

   if(viewId.equals(Constants.VIEW_ERROR))
     return;

   Iterator messages = context.getMessages();
   while(messages.hasNext()) {
     FacesMessage message = (FacesMessage) messages.next();
     if(message.getSeverity() == FacesMessage.SEVERITY_FATAL) {
       context.getApplication().getNavigationHandler().handleNavigation(context,
null, "error");
     }
   }
 }

 public PhaseId getPhaseId() {
   return PhaseId.RENDER_RESPONSE;
 }
}

Reply via email to