Vaadin 8-网格验证器可“听到”单元格中的值

时间:2018-08-11 20:16:58

标签: java vaadin vaadin8

我在Vaadin 8 Minimum中有MaximumGrid列。 这些列是可编辑的。我需要使验证器也相互检查这两个值 因此,如果在字段Maximum中输入的值小于该行中Minimum条目的值, 验证者将发出错误,反之亦然。

代码如下:

grid.addColumn(AuditParams::getMaxAmt, new NumberRenderer())
.setId("max")
.setCaption("Max")
.setEditorBinding(grid
        .getEditor()
        .getBinder()
        .forField(new TextField())
        .withConverter(new StringToFloatConverter("Enter a value greater than 0"))
           .withValidator(v -> v>0.0f, "Must be a positive value")
           .withValidator(v -> v<Constants.MAX_AMT, "Maximum can be "+Constants.MAX_AMT)
        .bind(AuditParams::getMaxAmt, AuditParams::setMaxAmt)
);

在Vaadin 8中如何做到这一点?如何将另一个单元格的值传递给验证器?

TIA

// --------------------

我尝试将以下验证器添加到其他两个验证器之后的“ max”列中:

           .withValidator(v -> v>=((Float)grid.getColumn("min")
               .getEditorBinding().getField().getValue()), 
               "Incorrect range")

此验证器从不传递任何内容-始终发出错误“范围不正确”。

// --------------------

更准确-尝试了以下验证程序,它可以工作。

           .withValidator(v -> v>=(Float.parseFloat((String)(grid.getColumn("min")
               .getEditorBinding().getField().getValue()))), 
               "Incorrect range")

但是-数字以格式显示(每3位之间{,),并且验证程序尝试将其读取为数字-不使用格式。除非我在编辑时摆脱了这些逗号,否则这仍然会引发错误。会在另一个问题中问这个问题。

2 个答案:

答案 0 :(得分:0)

使用字段级验证,您最多只能进行单个字段。当您要检查多个字段时,可以使用Bean级验证。请注意,您在这里可能会遇到一些问题,并且可能需要一些解决方法(由于我遇到一些限制,api有所更改,所以我不知道当前情况)https://github.com/vaadin/framework/issues/10406

答案 1 :(得分:0)

问题中的第二个编辑解决了它。我通过将String从格式化形式显式转换回parseFloat()之前解决了数字格式问题。完全有效。