Carlos Laspina
Carlos Laspina

Reputation: 2221

Binder validator for field doesn't work properly for NullPresentation value

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.

enter image description here

I can fix this, removing withNullRepresentation(0) but when I charge my form show null text, like this:

enter image description here enter image description here

How to validate Zero value when I put a null representation for the field?

Upvotes: 1

Views: 342

Answers (1)

Mika
Mika

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

Related Questions