我是Vaadin Framework的新手。尝试使用preCommit()
的grid.getEditorFieldGroup().addCommitHandler()
方法验证网格列。当我第一次验证时,验证成功,错误指示以及错误消息显示成功。但是,如果我立即保存,相应的值在达到preCommit()方法时变为null。如何解决这个问题?
我尝试过使用辅助对象。所以我认为这不会影响源对象。但这对我没有帮助。
grid.getEditorFieldGroup().addCommitHandler(new FieldGroup.CommitHandler() {
@Override
public void preCommit(FieldGroup.CommitEvent commitEvent) throws
FieldGroup.CommitException {
BeanItem item = (BeanItem)
commitEvent.getFieldBinder().getItemDataSource();
MyClass qm = (MyClass) item.getBean();
grid.getColumn("myColumn").
setEditorField(generateMachineCode(qm.myColumnValue());
}
private Field << ? > generateMachineCode(String machineCode) {
TextField editableTextFiled = new TextField();
editableTextFiled.setEnabled(true);
if (StringUtils.isNotEmpty(machineCode) && !machineCode.equals("12345")) {
editableTextFiled.addValidator(new StringLengthValidator("It must be 6
characters ", 6, 6, false));
}
}
}
我通过在preCommit()方法的位置从列中输入新值来克服此问题。请参考下面,
TextField nameField = (TextField) grid.getColumn("name").getEditorField();
nameField .getValue(); // new name.
我每次都会将这个新名称设置为我的源对象。因此,一旦验证成功。由于我们将字段值设置为对象,因此字段值保持不变。