Welcome to the JavaRanch, Astria!
Just to clarify one thing, because a lot of people don't understand it: I trust you
are aware that valueChangeListeners are not asynchronous event processors?
A valueChangeListener only fires when an HTTP request is made,
and when the new value has passed validation. The only way to actually trigger a valueChangeEvent short of using a commandButton or commandLink is if you tie AJAX to the control whose value is changing. Or at least to something.
If you provide an action method (
please don't use an actionListener!) on the submitting event, that action method will be invoked after all the validators have approved the data, the valueChangeListeners have fired, and the Model has been updated from the View. That action method can do whatever checks it wants to do above and beyond what the validators did, post error messages to
JSF, and then select the new tab or return to the old one. Of course, it can also do the data save operation while it's at it.