The first question to ask in cases like this is "are there other controls on the form that have invalid values?".
When you set a listener on a control, it's not a direct pipeline to the backend code. Unless you are using AJAX, the listener won't be fired until/unless:
1. A Submit of the form is done (typically click on commandButton or commandLink).
AND
2. ALL form control data values are valid. If even one is not valid, the
JSF validators will short-circuit the JSF lifecycle steps that include updating the backing bean and firing the listener.
Oh, BTW, you can get rid of those red faces by wrapping your
java code and XML with "code" tags. There's a button for it on the message editor form.