我正在使用JFace数据绑定。我有一个具有四个不同属性的Java bean,并且所有这些属性都绑定到相应的小部件,更新策略为POLICY_CONVERT
,因此仅当我点击“保存”按钮时才更新模型。 “保存”按钮的侦听器调用DataBindingContext.updateTargets()
,以便更改显示在其他位置。
某些属性具有验证器。现在,应用程序的工作方式是,当我点击“保存”按钮时,无效的属性不会更新到模型,有效的属性会更新。但我想要做的是当且仅当所有验证器都成功时才更新模型。
使用JFace有一种简单的方法吗?我可以想象通过创建验证所有属性的验证器来做到这一点,但我希望有一些通用的解决方案。
谢谢!
答案 0 :(得分:1)
一种可能性是创建一个Composite或Chained验证器并将所有验证器放入其中。然后,如果至少有一个validaotr无法验证,则链式验证器返回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;
}
}
}
}
然后使用相同的复合验证器绑定所有控件,但也添加控件特定的验证器。
您还可以将控制传递给验证器,如果出现错误,您可能希望在必要时显示此字段的错误控制装饰。