Business validations rarely work well using JSF validator objects, because of the fact that the rules are context-sensitive and the JSF validators prefer to deal in absolutes.
ActionListeners give no benefit. It is sufficient to code the business validation login in an action method in most cases. Rather than attempting to throw a valiatorexception, I simply post a user-defined JSF message and abort the action, like so:
JSFUtils is just a catch-all class that I use to offload JSF-specific code into. It simplifies coding things like adding error messages or meddling around with
J2EE objects and it makes
testing easier, since I can swap out an emulated version when I'm running offline tests and don't actually have JSF running.
The technique I use of putting a bunch of tests that can bail out before I do the actual processing in a method isn't one I've ever seen formally blessed anywhere, but it gives a method to my madness. I call it "filtered processing", since it filters out conditions that would make processing impossible (or at least invalue). All the filters are done FIRST, followed by the processing code. It's similar to what Exceptions do, except that the mechanisms are less extreme. And, of course, Exceptions - since they are exceptional - are often not as easy to limit to the prolog part of a method.