为 JFace 数据绑定添加 IValidator 到 ListBinding
Add IValidator to ListBinding for JFace Databinding
class ValueBinding
有两个 UpdateValueStrategy
(用于目标到模型和模型到目标),它们都有一个转换器和三个验证器("after get"、"after convert" 和 "before set")。
带有 UpdateListStrategy
s 的 ListBinding
没有任何东西,只有一个转换器(我不确定那个东西是否打开)。我想为验证列表中至少有一个元素的用例实现类似于 UpdateValueStrategy
的验证器。
我尝试过的(以及我是如何失败的):
- 覆盖
ListBinding.doUpdate(...)
- 它是私有的
- 向
ListBinding.validationStatusObservable
添加一个更改侦听器并在设置后进行验证 - 我无法判断更新是模型 -> 目标还是目标 -> 模型,所以我不知道应该使用哪个列表得到验证
有效的是针对新 WritableValue
创建第二个绑定并向其添加验证器。但这并不是真正的最佳选择。我宁愿有一个在验证失败时不会更新的绑定。
我敢肯定之前肯定有人遇到过同样的问题,因此问题是:如何将 IValidator
添加到 ListBinding
?
所以我自己做了 UpdateListStrategy
(用 21 点和...没关系):
public class BetterUpdateListStrategy extends UpdateListStrategy {
@Override
protected IStatus doAdd(IObservableList observableList, Object element, int index) {
IStatus result = super.doAdd(observableList, element, index);
if (result.isOK()) {
result = validate(observableList);
}
return result;
}
// these methods are overridden in exactly the same way:
// protected IStatus doMove(IObservableList observableList, int oldIndex, int newIndex)
// protected IStatus doRemove(IObservableList observableList, int index)
// protected IStatus doReplace(IObservableList observableList, int index, Object element)
private IStatus validate(IObservableList value) {
// my validation; I added an IValidator to have a similar API
// to the UpdateValueStrategy
return Status.OK_STATUS;
}
}
它还不能完美地工作(如果验证失败,绑定没有错误状态),但这可能对其他人有帮助。
class ValueBinding
有两个 UpdateValueStrategy
(用于目标到模型和模型到目标),它们都有一个转换器和三个验证器("after get"、"after convert" 和 "before set")。
带有 UpdateListStrategy
s 的 ListBinding
没有任何东西,只有一个转换器(我不确定那个东西是否打开)。我想为验证列表中至少有一个元素的用例实现类似于 UpdateValueStrategy
的验证器。
我尝试过的(以及我是如何失败的):
- 覆盖
ListBinding.doUpdate(...)
- 它是私有的 - 向
ListBinding.validationStatusObservable
添加一个更改侦听器并在设置后进行验证 - 我无法判断更新是模型 -> 目标还是目标 -> 模型,所以我不知道应该使用哪个列表得到验证
有效的是针对新 WritableValue
创建第二个绑定并向其添加验证器。但这并不是真正的最佳选择。我宁愿有一个在验证失败时不会更新的绑定。
我敢肯定之前肯定有人遇到过同样的问题,因此问题是:如何将 IValidator
添加到 ListBinding
?
所以我自己做了 UpdateListStrategy
(用 21 点和...没关系):
public class BetterUpdateListStrategy extends UpdateListStrategy {
@Override
protected IStatus doAdd(IObservableList observableList, Object element, int index) {
IStatus result = super.doAdd(observableList, element, index);
if (result.isOK()) {
result = validate(observableList);
}
return result;
}
// these methods are overridden in exactly the same way:
// protected IStatus doMove(IObservableList observableList, int oldIndex, int newIndex)
// protected IStatus doRemove(IObservableList observableList, int index)
// protected IStatus doReplace(IObservableList observableList, int index, Object element)
private IStatus validate(IObservableList value) {
// my validation; I added an IValidator to have a similar API
// to the UpdateValueStrategy
return Status.OK_STATUS;
}
}
它还不能完美地工作(如果验证失败,绑定没有错误状态),但这可能对其他人有帮助。