EMF ベースの Eclipse アプリケーションに次の問題があります。
元に戻すは正常に機能します。検証は正常に機能します。ただし、GUI フィールドのデータに検証エラーがあると、元に戻すアクションの使用がブロックされます。たとえば、そのフィールドを有効な状態に戻すために元に戻すことはできません。
この図では、 undo を使用することはできません:
アプリケーションで使用されるツール:
- Eclipse データバインディング
UpdateValueStrategy
検証のためのバインディングに関するUndoAction
元に戻すは、を呼び出す標準を使用して実装されますCommandStack.undo
MessageManagerSupport
検証フレームワークを Eclipse Forms ベースの GUI に接続するクラス。
データ バインディングは次のようになります。
dataBindingContext.bindValue(WidgetProperties.text(...),
EMFEditProperties.value(...), validatingUpdateStrategy, null);
問題はこれです:
- 元に戻すシステムは、モデルを変更するコマンドで機能します。
- 検証システムは、検証エラーがある場合、更新がモデルに到達するのを停止します。
検証エラーが発生したときに元に戻すには、次のいずれかを実行できると思います。
- GUI 層で元に戻すシステムを動作させます。(これは大きな変更になるでしょう。これに EMF を使用することはおそらくまったく不可能です。)
- 有効なデータと同様に、モデル データを変更する GUI トリガー コマンドで無効なデータを作成します。(データがディスクに保存されない限り、これは問題ありません。しかし、これを行う方法が見つかりません。)
- のコンテンツ リスナーによってトリガーされる可能性がある、モデルで検証を直接機能させ
Resource
ます。(これは検証戦略の大きな変更です。この段階でソース GUI コントロールを追跡することはできないようです。)
これらの解決策は、不可能に見えるか、深刻な欠点があります。
検証エラーが発生した場合でも元に戻すにはどうすればよいですか?
注:Mad Mattsの回答は、彼らの提案が私の解決策につながるため、受け入れます。しかし、私はそれで満足しているわけではなく、もっと良いものがあればいいのにと思います。
誰かがより良い解決策を見つけた場合、現在の解決策ではなく、喜んでそれを受け入れることを検討します!