Vaadin 8 - 网格验证器到 "hear" 跨单元格的值
Vaadin 8 - Grid validator to "hear" values across cells
我在 Vaadin 8 Grid
中有列 Minimum
和 Maximum
。
这些列是可编辑的。我需要让验证器也相互检查这两个值
因此,如果在字段 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
从格式化形式转换回来解决数字格式问题。完全达到效果。
我在 Vaadin 8 Grid
中有列 Minimum
和 Maximum
。
这些列是可编辑的。我需要让验证器也相互检查这两个值
因此,如果在字段 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
从格式化形式转换回来解决数字格式问题。完全达到效果。