Description
Hi,
I recently had an issue with a CompoundValidator using a StringValidator inside.
The problem was that the TextField which had the validator assigned did not have a "maxlength" attribute in its HTML representation. Normally StringValidator outputs this attribute automatically when the maximum is not null and the HTML field is of type "input". This is handled in StringValidator.onComponentTag.
Unfortunately, CompoundValidator does not delegate its own onComponentTag method to the contained validators, so the onComponentTag method of the included StringValidator is never called.
I think, all Behavior methods should be implemented by CompoundValidator to delegate to the contained validators because this is the expected behavior.
For onComponentTag it could look like this:
@Override public void onComponentTag(Component component, ComponentTag tag) { for (IValidator<T> validator : validators) { if (validator instanceof Behavior) { Behavior behavior = (Behavior) validator; behavior.onComponentTag(component, tag); } } }