字段的活页夹验证器不能正常工作 NullPresentation 值

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

我有以下 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;
        }
    }

例如,当我为名为 number 的字段设置一个简单的活页夹时,关联到 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);

验证器按预期工作

除非为零(空表示),在这种情况下,验证不起作用。

我可以解决这个问题,删除 withNullRepresentation(0) 但是当我为我的表格充电时显示 null 文本,如下所示:

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

Vaadin RangeValidator returns true 验证 null 值时。当 null 表示为 0 时,用户输入 "0" 结果 null 值,该值对此验证器有效。

您可以通过实现一个验证器来解决这个问题,该验证器 not return true for null value.

有时您需要知道 null0 值之间的差异,然后使用将 null 转换为 "" 表示的转换器而不是使用 withNullPresentation(0) 会有用。