Search code examples
jsfopenfaces

FacesMessage listener


What is the way for debugging JSF messages. Can I implement some listener and catch all error messages that JSF is about to display?


Solution

  • You could with a PhaseListener hook on the beforePhase() of the PhaseId.RENDER_RESPONSE.

    E.g.

    public class MessagesListener implements PhaseListener {
    
        @Override
        public PhaseId getPhaseId() {
            return PhaseId.RENDER_RESPONSE;
        }
    
        @Override
        public void beforePhase(PhaseEvent event) {
            Iterator<FacesMessage> messageIterator = event.getFacesContext().getMessages();
    
            while (messageIterator.hasNext()) {
                FacesMessage message = messageIterator.next();
                // ...
            }
        }
    
        @Override
        public void afterPhase(PhaseEvent event) {
            // NOOP.
        }
    
    }
    

    To get it to run, register it as follows in faces-config.xml:

    <lifecycle>
        <phase-listener>com.example.MessagesListener</phase-listener>
    </lifecycle>