Вернуть (отменить) реализацию в GWT

Мы пытаемся создать структуру графического интерфейса с помощью GWT. Нам трудно реализовать функцию отмены в фреймворке.

Обязательная функция это:

У нас есть экраны CRUD с всплывающими окнами, сетками и так далее. Когда пользователь изменяет что-либо в графическом интерфейсе, а затем нажимает кнопку «Отменить()», ему должно быть выдано сообщение с уведомлением о том, что что-то изменилось.

Подход, который мы пробовали:

В настоящее время мы пытаемся сохранить хэш-карту ключа и значения всего объекта pojo и пытаемся сравнить ее с моделью, которая обновляется по мере того, как пользователь что-то меняет. Но это добавляет много нежелательного кода в каждый pojo и не работает должным образом, когда пользователь добавляет данные непосредственно из бэкэнда.

Есть ли какой-нибудь элегантный способ достижения этой функциональности? Пожалуйста, обратите внимание, что *мы не используем структуру редактора GWT *(https://developers.google.com/web-toolkit/doc/latest/DevGuideUiEditors) в нашем применение.

Пример: Предположим, у меня есть такое pojo:

public class Person {

    List<Address> address;
    PhoneNumber phoneData;


    // and so on along with getters and setters

}

Как мне написать общий метод клонирования для этого? И даже если мне удастся это сделать каким-то образом, это приведет к большому количеству кода в каждом pojo (в нашем приложении их сотни), что кажется неправильным.

Обратите внимание, что наше pojo обновляется, как только что-то изменяется в графическом интерфейсе для достижения живой привязки.


person LPD    schedule 09.01.2013    source источник
comment
Может быть, сделать снимок POJO перед редактированием (clone()), а затем сравнить отредактированный POJO со снимком (equals())?   -  person Thomas Broyer    schedule 09.01.2013
comment
??? в чем проблема? Вы не должны изменять данные, пока пользователь не подтвердит изменения с помощью ok. Когда пользователь решит нажать кнопку «Отмена», просто закройте диалоговое окно и обратитесь к предыдущему.   -  person THarms    schedule 09.01.2013
comment
Вам нужно как-то сделать снимок, и я думаю, что Томас на правильном пути. В противном случае вам придется записывать каждое редактирование, которое делает пользователь, и знать, как отменить его, что звучит как гораздо больше работы с гораздо большим количеством крайних случаев.   -  person Riley Lark    schedule 09.01.2013


Ответы (1)


Так у вас в форме есть кнопки "Сохранить" и "Отмена"?

Я бы порекомендовал вам изменить концепцию. Обновляйте свойства объекта сразу же, как только пользователь редактирует их (как в GMail, JIRA и многих других современных приложениях) в обработчике событий OnChange.

Сохраните все обновления в стеке сеанса как объекты UpdateAction и позвольте пользователю отменить каждое отдельное изменение свойства, вызвав метод UpdateAction.undo().

Преимущества:

  1. этот дизайн гораздо более удобен для пользователя, чем сценарий «Нажмите «Изменить» - обновите - нажмите «Сохранить»».

  2. Вам не нужны отдельные формы просмотра/редактирования/всплывающие диалоговые окна – достаточно одной формы для просмотра и редактирования.

person Andrey Minogin    schedule 09.01.2013
comment
Спасибо за Ваш ответ. Наше приложение уже сразу обновляет модель при любых изменениях в графическом интерфейсе. Я не совсем понял объект действия обновления, о котором вы говорили. Мы пытаемся написать структуру, которая должна поддерживать любое действие возврата модели. У нас есть только одна форма для просмотра и редактирования. Но в них присутствуют попапы для сложных конфигураций - person LPD; 09.01.2013
comment
Если вы обновляете базу данных немедленно, вам не нужна кнопка «Отмена». Для чего это? - person Andrey Minogin; 09.01.2013
comment
Я предлагаю вам немедленно обновить базу данных. Тогда вам вообще не понадобится кнопка «Отмена». - person Andrey Minogin; 09.01.2013
comment
Извините, но мне нужна кнопка отмены. Это большая форма с большим количеством полей, и мы не можем каждый раз обновлять базу данных. - person LPD; 09.01.2013