手动调用 DataBindingContext.updateModels() 导致 UnsupportedOperationException

Manually calling DataBindingContext.updateModels() causes UnsupportedOperationException

我正在将 RCP 应用程序从 2015 更新到 2018-09(支持 32 位 JVM 的最新版本)。

在包含多个部分的托管表单中,每个部分都有自己的 DataBindingConext (dbc),我使用主 dbc 中的 AggregateValidationStatus 跟踪所有验证错误和警告消息。

在用户流程的某个时刻,我需要提供所有验证错误和警告消息的列表。当我最初在 2015 年编写代码时,我想 确保 所有验证代码在显示给用户之前已经执行,所以我手动调用 masterDbc.updateModels()。此执行无一例外。

现在手动调用 masterDbc.updateModels() 会在 AggregateValidationStatus.calculate() 的 return 上产生 UnsupportedOperationException。请注意,在任何 dbc 上手动调用 updateModels() 时会发生此异常,而不仅仅是主 dbc。

两个问题:

  1. 这是预期的行为吗?
  2. 鉴于用户必须选择菜单选项/按钮来获取验证问题的摘要,我是否需要手动调用 updateModels()?

谢谢, 蒂莫西

该问题的解决方案是使用 POLICY_NEVER 传入 targetToModel UpdateValueStrategy,这样就不会尝试更新只读 AggregateValidationStatus

this.dbc.bindValue(WidgetProperties.text().observe(lblErrMsg),
    new AggregateValidationStatus(this.dbc, AggregateValidationStatus.MAX_SEVERITY),
                new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER), null);