我正在使用 JFace 数据绑定(bind)。我有一个具有四个不同属性的 Java bean,所有这些属性都绑定(bind)到相应的小部件,更新策略为 POLICY_CONVERT,因此仅当我点击“保存”按钮时模型才会更新。 “保存”按钮的监听器调用 DataBindingContext.updateTargets()
,以便更改显示在其他位置。
一些属性有 validator 。现在,应用程序的工作方式是,当我点击“保存”按钮时,无效属性不会更新到模型,而有效属性会更新。但我想做的是当且仅当所有 validator 都成功时才更新模型。
是否有一种使用 JFace 执行此操作的简单方法?我可以想象通过创建一个验证所有属性的 validator 来以困难的方式做到这一点,但我希望有一些通用的解决方案。
谢谢!
最佳答案
一种可能性是创建一个复合或链式 validator 并将所有 validator 放入其中。然后,如果至少一个 validaotr 无法验证,您的链式 validator 将返回 false。
例如:
if (validators != null && validators.length > 0) {
UpdateValueStrategy update = new UpdateValueStrategy();
CompositeValidator validator = new CompositeValidator();
for (IValidator val2Add : validators) {
validator.addValidator(val2Add);
}
update.setAfterConvertValidator(validator);
}
public class CompositeValidator implements IValidator {
private List<IValidator> validators = new ArrayList<IValidator>();
public IStatus validate(Object value) {
for (IValidator validator : validators) {
IStatus status = validator.validate(value);
if (IStatus.ERROR == status.getSeverity()) {
return status;
}
}
}
}
然后将所有控件绑定(bind)到相同的复合 validator ,但同时添加特定于控件的 validator 。
您还可以将控制权传递给 validator ,如果出现错误,您可能希望在必要时显示此字段的错误控制装饰。
关于java - JFace数据绑定(bind): Update model only if all validators succeed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577061/