如果我得到一个bean和一个对话框,并且它们与双向数据绑定相结合,那么当用户取消编辑时,回滚到原始bean的最佳方法是什么。
编辑1
如果用户在编辑模式下打开对话框,他会进行一些修改并按“OK”,然后关闭此对话框并更新底层bean。当我说“取消编辑”时,我的意思是用户打开了对话框并进行了一些修改但按下了“取消”按钮。在这种情况下,底层bean应保持不变,但由于数据绑定,它变脏,我想要原来的bean。
我可以在对话框打开时克隆一个bean,如果用户按“OK”,克隆的bean将被复制回原始bean;如果用户按下“取消”,克隆的bean将被放弃。 我不知道这是不是一个好方法。
答案 0 :(得分:3)
我一直非常成功地使用克隆方法。克隆方法有两种:绑定到克隆并绑定到原始。
绑定到克隆将使其成为任何其他绑定到屏幕上相同字段的对话框启动时不会更新。按下确定后,将克隆复制到原始对象,取消时,只需将克隆丢弃即可。
Bind to original允许屏幕更新绑定到同一字段的其他组件。当按下OK时,你将克隆扔掉。按下取消时,将克隆复制到原始。
我赞成使用bind to clone方法,因为我认为在对话框启动时看到其他屏幕组件更新是令人困惑的。我认为这会导致混淆是否取消将回滚出现在对话框外的更改。
另一种方法是使用一种可刷新的绑定策略,其中绑定可以这样设置,即在调用某种flush()方法之前它不会更新对象。如果您的数据绑定框架不支持这一点,那么稍后解决此问题可能需要做很多工作。
答案 1 :(得分:0)
“取消编辑?”是什么意思?没有一些示例代码,很难提供帮助。最通用的解决方案是将先前的值存储为某个变量。
也许实施一个PropertyChangeListener
?您可以通过PropertyChangeEvent.getOldValue()
获取旧值吗?也许VetoableChangeListener
也可能适合你。