gpt4 book ai didi

java - JFace/Eclipse 数据绑定(bind)在 AggregateValidationStatus 的 ChangeListener 中触发多重 validator

转载 作者:行者123 更新时间:2023-12-02 12:12:24 24 4
gpt4 key购买 nike

我有一个带有 IChangeListenerAggregateValidationStatus。每次我选择/更改和组件时都会调用监听器,这正是我所需要的。我遇到的唯一问题是我必须在 ChangeListener 开头触发 MultiValidatorvalidate() 方法。遗憾的是,文档非常少,我发现的内容对我没有帮助。

我的ChangeListener

final AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus(
dataBindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY);
aggregateValidationStatus.addChangeListener(new IChangeListener() {
public void handleChange(ChangeEvent event) {
//Here I have to trigger the MultiValidator to return either OK or ERROR
boolean formIsValid = true;
aggregateValidationStatus.getValue();
for (Object o : dataBindingContext.getBindings()) {
Binding binding = (Binding) o;
IStatus status = (IStatus) binding.getValidationStatus().getValue();
if (!status.isOK()) {
formIsValid = false;
}

Control control = null;
if (binding.getTarget() instanceof ISWTObservable) {
ISWTObservable swtObservable = (ISWTObservable) binding.getTarget();
control = (Control) swtObservable.getWidget();
}
if (binding.getTarget() instanceof CalendarComboObservableValue) {
CalendarComboObservableValue observable = (CalendarComboObservableValue) binding.getTarget();
control = (Control) observable.getControl();
}

if (binding.getTarget() instanceof IViewerObservable) {
IViewerObservable observable = (IViewerObservable) binding.getTarget();
control = observable.getViewer().getControl();
}

ControlDecoration decoration = decoratorMap.get(control);
if (decoration != null) {
if (status.isOK() || status.matches(Status.WARNING)) {
decoration.hide();
} else {
decoration.setDescriptionText(status.getMessage());
decoration.show();
}
}
}
if (saveBtn != null)
saveBtn.setEnabled(formIsValid);
}
});

最佳答案

您的AggregateValidationStatus仅聚合datBindingContext的绑定(bind):

final AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus(
dataBindingContext.getBindings(), AggregateValidationStatus.MAX_SEVERITY);

MultiValidator 不是附加到单个绑定(bind),而是附加到整个上下文。因此,如果您希望 AggregateValidationStatus 也监控 MultiValidator,您应该使用不同的构造函数:

final AggregateValidationStatus aggregateValidationStatus = new AggregateValidationStatus(
dataBindingContext, AggregateValidationStatus.MAX_SEVERITY);

这应该会使 handleChangedMultiValidator 的手动触发变得 super 流畅。

关于java - JFace/Eclipse 数据绑定(bind)在 AggregateValidationStatus 的 ChangeListener 中触发多重 validator ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46442639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com