Если в диалоге используется привязка данных, как восстановить данные, когда пользователь отменил редактирование? - PullRequest
1 голос
/ 08 сентября 2010

Если я получаю бин и диалоговое окно, и они связаны с двунаправленной привязкой данных, каков наилучший способ отката к исходному бину, когда пользователь отменил редактирование.

РЕДАКТИРОВАТЬ1

Если пользователь открыл диалоговое окно в режиме редактирования, затем он внес некоторые изменения и нажал «ОК», то это диалоговое окно закрылось и базовый компонент был обновлен.Когда я сказал «отменил редактирование», я имею в виду, что пользователь открыл диалоговое окно и сделал некоторые изменения, но нажал кнопку «отменить».В этом случае базовый компонент должен оставаться нетронутым, но из-за привязки данных он становится грязным, и я хочу вернуть исходный компонент.

Я могу просто клонировать bean-компонент, когда открывается диалоговое окно, если пользователь нажимает «OK», клонированный bean-компонент будет скопирован обратно в оригинальный bean-компонент;если пользователь нажимает «отменить», клонированный компонент будет оставлен.Я не знаю, хороший ли это подход.

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Я всегда успешно использовал клонированный подход.Подход клонирования представлен в двух вариантах: привязка к клону и привязка к оригиналу.

Привязка к клону сделает это таким образом, что любая другая привязка к тому же полю на экране не будет обновляться, пока ваше диалоговое окно открыто.При нажатии кнопки «ОК» вы копируете клон в исходный объект, а при отмене просто выбрасываете клон.

Привязка к оригиналу позволяет выполнять обновления экрана для других компонентов, привязанных к тому же полю.Когда нажата OK, вы выбрасываете клона.Когда нажата кнопка отмены, вы копируете клон в оригинал.

Я предпочитаю подход привязки к клону, поскольку мне кажется странным видеть обновление других компонентов экрана, пока открыто диалоговое окно.Я думаю, что это создает путаницу относительно того, отменит ли откат изменения, которые появляются за пределами диалогового окна.

Альтернатива состоит в том, чтобы использовать стратегию сбрасываемого связывания, где привязка может быть настроена таким образом, что она не будетобновлять объект до тех пор, пока не будет вызван какой-то метод flush ().Если ваша инфраструктура привязки данных не поддерживает это, может потребоваться много усилий, чтобы решить эту проблему позже.

0 голосов
/ 08 сентября 2010

Что вы подразумеваете под "отменили редактирование?"Без некоторого примера кода трудно помочь.Самое общее решение - хранить предыдущее значение как переменную где-нибудь.

Возможно, реализовать PropertyChangeListener?Вы можете получить старое значение через PropertyChangeEvent.getOldValue()?Может быть, VetoableChangeListener может работать и для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...