The error handler should return all errors that have to be displayed. Errors are added to the ErrorHandler while processing the action, which obviously happens after the call to ErrorHandler.errors. So, what happens? First, all errors are displayed (there are none). Secondly, the action is being processed and perhaps some erros added. But they are only displayed in the next request/response. The problem is, that the call to ErrorHandler.errors is made before the action is being processed.
There is no "ErrorHandler.errors" method here. What you are doing is coding an EL expression that references the "errors" property of a bean named "ErrorHandler". Which is a bad choice for a bean name, because you're using the Classname capitalization convention on an instance of a class.
However, like I said, there's no "errors" method, just calls to getErrors() and setErrors(). Or, since this is an output-only component, just getErrors(). The actual value of the "errors" property has be be set somewhere else, such as in an action processor.
As a side note, you're using the "escape" option which means you're apparently planning to output raw HTML. That's not something I recommend as a general rule. It muddies the Model and View boundaries. In fact, ff you look at the JSF standard "messages" tag, you'll notice there is no "escape" attribute there. They provide basic formatting services (table or list view) and leave the rest up to CSS.
An IDE is no substitute for an Intelligent Developer.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com