手动调用DataBindingContext.updateModels会导致UnsupportedOperationException

问题描述

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

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

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

现在,手动调用masterDbc.updateModels()会在返回UnsupportedOperationException时引起AggregateValidationStatus.calculate()。请注意,在任意一个dbc上(不仅是主dbc)上手动调用updateModels()时,都会发生此异常。

两个问题:

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

谢谢, 蒂莫西

解决方法

该问题的解决方案是将targetToModel UpdateValueStrategyPOLICY_NEVER一起传递,以便不尝试更新只读AggregateValidationStatus

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...