我们在 RAP 应用程序中使用 Eclipse API。这使用 Eclipse Modeling Frame Work。当页面被编辑时,模型变脏,结果,保存按钮被启用。
在我们的编辑器页面中,当页面中出现错误时,我们将编辑器页面的验证标志设置为 false,这会反过来在页面上显示红色标记。然后通常保存按钮也会被启用。
但是,我想改变这种行为。当页面上出现一些错误标记时,我不想启用保存按钮,它不应该允许用户在错误阶段保存模型。保存按钮应该被禁用,我怎样才能做到这一点。请清除我的疑问。
我们在 RAP 应用程序中使用 Eclipse API。这使用 Eclipse Modeling Frame Work。当页面被编辑时,模型变脏,结果,保存按钮被启用。
在我们的编辑器页面中,当页面中出现错误时,我们将编辑器页面的验证标志设置为 false,这会反过来在页面上显示红色标记。然后通常保存按钮也会被启用。
但是,我想改变这种行为。当页面上出现一些错误标记时,我不想启用保存按钮,它不应该允许用户在错误阶段保存模型。保存按钮应该被禁用,我怎样才能做到这一点。请清除我的疑问。
EMF 生成的编辑器使用命令堆栈侦听器向编辑器触发 PROP_DIRTY。如果此属性被触发,底层框架将向编辑器询问脏状态的#isDirty 方法。这是您可以实现逻辑的地方。
@Override
public boolean isDirty() {
Diagnostic diagnostic = validateMyModel();
return ((BasicCommandStack)editingDomain.getCommandStack()).isSaveNeeded() && diagnostic.getSeverity() == Diagnostic.OK;
}
这种情况不包括用例,即当用户对模型进行无效编辑时,编辑器可能已经脏了。
但这不是恕我直言的最佳方式。因为如果用户关闭编辑器,模型的所有更改都会丢失,没有任何通知(因为丢失了脏标志)。所以他可能做了 100 次有效的修改,1 次无效并且丢失了他改变的模型。
如果用户想要保存对话框,更好的方法是显示警告消息。如果对话框中有错误,编辑器无法将其状态从脏更改为非脏,用户必须
为此,您必须在 doSave(IProgressMonitor progressMonitor) 方法中实现一个对话框来显示错误。更棘手的部分是覆盖关闭脏编辑器的默认行为。工作台将显示一个对话框,其中包含是、否和取消。要覆盖此行为,您必须在编辑器中实现接口 org.eclipse.ui.ISaveablePart2 以覆盖 promptToSaveOnClose() 方法。在这种方法中,必须再次有您的逻辑来检查模型中的错误。如果有错误,此方法必须返回 ISaveablePart2.CANCEL,这样只要脏模型中有错误,编辑器就不能关闭。
HTH 汤姆