Reputation: 2221
I have the following class:
public class FooClass {
Integer number;
String numberInLetters;
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getNumberInLetters() {
return numberInLetters;
}
public void setNumberInLetters(String numberInLetters) {
this.numberInLetters = numberInLetters;
}
}
When I set, for example, a simple binder for a field named number, associated to fooObject:
FooObject fooObject = new FooObject();
fooObject.setNumberInLetters("thirty");
IntegerRangeValidator validator = new IntegerRangeValidator("The value must be greater than or equal to 30", 30, null);
validator.setMinValueIncluded(true);
Binder<FooObject> binder = new Binder<>();
binder.forField(number)
.withConverter(Integer::valueOf, String::valueOf, "Must be a number")
.withNullRepresentation(0)
.withValidator(intervaloValidator)
.bind(FooObject::getNumber, Fooobject::setNumber);
The validator works as expected
Except when is zero (null representation), in this case, the validation doesn't work.
I can fix this, removing withNullRepresentation(0)
but when I charge my form show null
text, like this:
How to validate Zero value when I put a null representation for the field?
Upvotes: 1
Views: 342
Reputation: 1276
Vaadin RangeValidator returns true
when validating null
value. When null
presentation is 0
then user input "0"
results null
value which is valid for this validator.
You can fix this by implementing a validator that does not return true
for null
value.
Sometimes you will need to know difference between null
and 0
values so then using a converter that converts null
to ""
presentation instead of using withNullPresentation(0)
will be useful.
Upvotes: 1