I achived maxlength through ComponentPlugin.
I don't like to extend controls.
Did not yet decided which way is better.
Code:
public class MaxLengthComponentPlugin implements ComponentPlugin<ValueBaseField<?>> {
int maxLength = -1;
public MaxLengthComponentPlugin(int maxLength) {
this.maxLength = maxLength;
}
@Override
public void initPlugin(final ValueBaseField<?> component) {
if (component.isRendered() && maxLength > 0) {
getInputEl(component).setAttribute("maxLength", "" + maxLength);
}
component.addAttachHandler(new AttachEvent.Handler() {
@Override
public void onAttachOrDetach(AttachEvent arg0) {
if(maxLength > 0) {
getInputEl(component).setAttribute("maxLength", "" + maxLength);
}
}
});
}
protected XElement getInputEl(ValueBaseField<?> component) {
return XElement.as(component.getCell().getInputElement(component.getElement()));
}
}