代码之家  ›  专栏  ›  技术社区  ›  solotim

如果在对话框中使用数据绑定,当用户取消编辑时如何恢复数据?

  •  1
  • solotim  · 技术社区  · 16 年前

    编辑1

    如果用户在编辑模式下打开对话框,然后进行一些修改并按下“OK”,那么这个对话框将关闭,底层bean将得到更新。当我说“取消编辑”时,我的意思是用户打开了对话框并做了一些修改,但按下了“取消”按钮。在这种情况下,底层bean应该保持不变,但是由于数据绑定,它变脏了,我希望恢复原始bean。

    我可以在对话框打开时克隆一个bean,如果用户按“OK”,克隆的bean将被复制回原始bean;如果用户按“cancel”,克隆的bean将被放弃。 我不知道这是不是个好办法。

    2 回复  |  直到 16 年前
        1
  •  3
  •   rancidfishbreath    16 年前

    我一直很成功地使用克隆方法。克隆方法有两种:绑定到克隆和绑定到原始。

    绑定到克隆将使其在对话框打开时,屏幕上相同字段的任何其他绑定都不会更新。按“确定”时,将克隆复制到原始对象;按“取消”时,只需丢弃克隆即可。

    绑定到原始允许屏幕更新到绑定到同一字段的其他组件。当按“确定”时,您将丢弃克隆。按“取消”时,将克隆复制到原始副本。

    我赞成bind-to-clone方法,因为我认为在对话框打开时看到屏幕上的其他组件更新会让人困惑。我认为这会造成混乱,因为cancel是否会回滚对话框外显示的更改。

    另一种方法是使用flushable绑定策略,其中绑定的设置方式是在调用某种flush()方法之前不会更新对象。如果您的数据绑定框架不支持这一点,那么以后将需要大量的工作来解决这个问题。

        2
  •  0
  •   The Alchemist    16 年前

    或许实施 PropertyChangeListener PropertyChangeEvent.getOldValue() VetoableChangeListener