AggregateValidationStatus
에 IChangeListener
이 있습니다. 청취자는 내가 선택할/변경하고 구성 요소가 필요할 때마다 호출됩니다. 내가 가지고있는 유일한 문제는 ChangeListener
의 시작 부분에 MultiValidator
이라는 validate()
메서드를 트리거해야한다는 것입니다. 슬프게도 문서가 매우 적어서 내가 찾은 것이 나를 도와주지 못했습니다.AggregateValidationStatus의 ChangeListener에서 JFace/Eclipse 데이터 바인딩 트리거 multivalidator
내 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를 만드는 방법을 코드에 추가 할 수 있습니까? –
@TillmannSeidel이 코드 – XtremeBaumer