Vaadin 8 - 网格验证器到 "hear" 跨单元格的值

Vaadin 8 - Grid validator to "hear" values across cells

我在 Vaadin 8 Grid 中有列 MinimumMaximum。 这些列是可编辑的。我需要让验证器也相互检查这两个值 因此,如果在字段 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")

这个验证器从不传递任何东西 - 总是发出错误 "Incorrect range"。

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

更准确 - 尝试了以下验证器并且它有效。

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

然而 - 数字以格式显示(, 每 3 位数字之间)并且验证器试图将其读取为数字 - 没有格式。除非我在编辑时去掉那些逗号,否则这仍然会引发错误。会在另一个Q问这个。

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

问题中的第二次编辑解决了它。我通过在传递给 parseFloat() 之前显式地将 String 从格式化形式转换回来解决数字格式问题。完全达到效果。