I've just delved into the issue a bit more. The source of the problem is:
While the error message is technically accurate, it lacks any context to help the user figure out what's wrong.
The description value supplied includes the source parameter that is in error, but it is appended to the string "parameter " in PageElementFactoryImpl:305. A hackish way of dealing with this is to do a substring to extract what we want. That's highly caller dependent, however. What we really should do is pass the parameter name as a separate parameter, which would necessitate either an interface change or addition.
It should be noted that the location value would help immensely as well, although it only shows the component in error, not the parameter value. Due to the fail fast nature of notBlank, the location value is essentially discarded. So, that should be wrapped up nicely as well.