字段的Binder验证器对NullPresentation值没有正常工作

时间:2017-09-30 03:54:21

标签: java validation vaadin vaadin8

我有以下课程:

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;
        }
    }

例如,当我设置一个名为数字的字段的简单绑定器时,与 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);

验证器按预期工作

  • error with one
  • must be a number error
  • validation succesfully

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

enter image description here

我可以解决这个问题,删除withNullRepresentation(0)但是当我向表单显示null文字时,就像这样:

enter image description here enter image description here

  

如何为我设置空表示时验证零值   场?

1 个答案:

答案 0 :(得分:1)

Vaadin RangeValidator在验证true值时返回null。当null演示文稿为0时,用户输入"0"会生成null值,该值对此验证程序有效。

您可以通过实现返回true null值的验证程序来解决此问题。

有时您需要了解null0值之间的差异,然后使用转换器将null转换为""呈现,而不是使用withNullPresentation(0)会很有用。