The idea for @InputField is nice, but having access to only the converted value of a field is limiting. We should switch to a wrapper type at the injection point to provide access to the id, clientId and component. The implementation could also leverage the narrowing bean facility in Weld Extensions to make the producer more strongly typed.
private InputElement<String> firstName;
private InputElement<String> lastName;
private InputElement<Date> dateOfBirth;
The input element thus allows much more flexibility in terms of what the developer can accomplish in the validation method. One of those is being able to assign a message to a particular input field.