我在Vaadin 8 Minimum
中有Maximum
和Grid
列。
这些列是可编辑的。我需要使验证器也相互检查这两个值
因此,如果在字段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位之间{,
),并且验证程序尝试将其读取为数字-不使用格式。除非我在编辑时摆脱了这些逗号,否则这仍然会引发错误。会在另一个问题中问这个问题。
答案 0 :(得分:0)
使用字段级验证,您最多只能进行单个字段。当您要检查多个字段时,可以使用Bean级验证。请注意,您在这里可能会遇到一些问题,并且可能需要一些解决方法(由于我遇到一些限制,api有所更改,所以我不知道当前情况)https://github.com/vaadin/framework/issues/10406
答案 1 :(得分:0)
问题中的第二个编辑解决了它。我通过将String
从格式化形式显式转换回parseFloat()
之前解决了数字格式问题。完全有效。