Vaadin 表字段中未显示验证图标
当我进入表格的编辑模式时,我希望当用户超出任何验证限制时,数据验证感叹号图标(!)立即显示。 首先,有几个注意事项:Vaadin 表字段中未显示验证图标,vaadin,vaadin7,Vaadin,Vaadin7,当我进入表格的编辑模式时,我希望当用户超出任何验证限制时,数据验证感叹号图标(!)立即显示。 首先,有几个注意事项: 我使用的是Vaadin 7,所以很遗憾,Bean验证插件无法工作 数据验证按预期工作 现在,我有了一个完美的工作台,我正在使用BeanItemContainer将我的个人豆子放在里面 表和TableFieldFactory的代码如下所示: table.setContainerDataSource(buildContainer()); table.setTableFieldFa
- 我使用的是Vaadin 7,所以很遗憾,Bean验证插件无法工作
- 数据验证按预期工作
table.setContainerDataSource(buildContainer());
table.setTableFieldFactory(new TableFieldFactory() {
@Override
public Field createField(Container container, Object itemId, Object propertyId, Component uiContext) {
TextField field = (TextField) DefaultFieldFactory.get().createField(container, itemId, propertyId,
uiContext);
field.setImmediate(true);
if (propertyId.equals("firstName")) {
field.addValidator(new BeanValidator(Person.class, "firstName"));
}
return field;
}
});
Person bean如下所示:
public class Person {
@Size(min = 5, max = 50)
private String firstName;
... setters + getters...
}
问题是,当我在firstName字段中键入某个内容,然后按enter键或模糊/取消聚焦该字段时,不会显示任何错误指示。我得把鼠标移到田野上看看有什么不对劲
我的问题是双重的
我不确定如何创建包装器,因为我正试图在TableFieldFactory的createField方法中实现这一点。有什么建议吗?我不熟悉FormLayout。解释得很好!它似乎工作得很好。方法textChange的调用在超出边界时引发InvalidValueException。我想我所要做的就是抓住那个错误,一切都会好起来的。非常感谢,查尔斯!效果很好,但是:在TreeTable(prabbly)中展开/折叠项目的速度非常慢,并且选择工作不正常(单击后某些行未被选中)。
public class ValidatingWrapper<T> extends CustomField<T> {
private static final long serialVersionUID = 9208404294767862319L;
protected Field<T> delegate;
public ValidatingWrapper(final Field<T> delegate) {
this.delegate = delegate;
if (delegate instanceof TextField) {
final TextField textField = (TextField) delegate;
textField.setTextChangeEventMode(AbstractTextField.TextChangeEventMode.TIMEOUT);
textField.setTextChangeTimeout(200);
textField.addTextChangeListener(new FieldEvents.TextChangeListener() {
@Override
public void textChange(FieldEvents.TextChangeEvent event) {
textField.setValue(event.getText());
textField.validate();
}
});
}
}
@Override
public Class<? extends T> getType() {
return delegate.getType();
}
@Override
protected Component initContent() {
return new FormLayout(delegate);
}
@Override
public Property getPropertyDataSource() {
return delegate.getPropertyDataSource();
}
@Override
public void setPropertyDataSource(Property newDataSource) {
delegate.setPropertyDataSource(newDataSource);
}
}
table.setContainerDataSource(buildContainer());
table.setTableFieldFactory(new TableFieldFactory() {
@Override
public Field createField(Container container, Object itemId, Object propertyId, Component uiContext) {
TextField field = (TextField) DefaultFieldFactory.get().createField(container, itemId, propertyId,
uiContext);
field.setImmediate(true);
if (propertyId.equals("firstName")) {
field.addValidator(new BeanValidator(Person.class, "firstName"));
}
return ValidatingWrapper(field);
}
});