2014-02-05 45 views
1

我正在使用JFace數據綁定。我有一個具有四個不同屬性的Java bean,並且它們都綁定到相應的小部件,其更新策略爲POLICY_CONVERT,因此只有在點擊保存按鈕時才更新模型。保存按鈕的偵聽器調用DataBindingContext.updateTargets(),以便將更改顯示在其他位置。JFace數據綁定:僅當所有驗證器成功時更新模型

某些屬性具有驗證器。現在,應用程序的工作方式是,當我點擊保存按鈕時,無效屬性不會更新到模型,並且更新有效的屬性。但是我想要做的是更新模型當且僅當所有驗證者成功

是否有一個簡單的方法與JFace做到這一點?我可以想象通過創建驗證所有屬性的驗證器來實現這一點,但我希望有一些通用的解決方案。

謝謝!

回答

1

一種可能性是創建一個複合或鏈接驗證器並將所有驗證器放入其中。然後,如果至少有一個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; 
    } 
} 
} 
} 

然後結合具有相同複合驗證所有的控制,但添加特定控制驗證器爲好。

您也可以將控件傳遞給驗證器,如果有錯誤,您可能需要顯示該字段的錯誤控制裝飾。