Версия 7 - itemPropertyChangeListener вызывается два раза


(Mikhail Bezroukov) #1

Добрый день,

У меня вот такая проблема …
Есть TreeDataGrid с CollectionContainer. Пользователь установил сортировку по клонке, которая я так понимаю сохранилась в Settings. Я программно меняю значение поля в сущности и событие по изменению property прилетает два раза. Так же два раза прилетает событие в CollectionChangeListener.
Попытался отследить по исходникам - такое впечатление, что AbstractInstance.addPropertyChangeListener вызывается два раза при загрузке экрана для одного и того же экземпляра сущности.

  • первый раз когда коллекция грузится
  • второй раз когда производится сортировка по сохраненным настройкам
    В этом методе не проверяется что такой listener уже есть и похоже что он добавляется два раза.

Пробовал отключить использование Settings - дубль в CollectionChangeListener исчез, но для PropertyChangeListener остался. Не могу найти, где listener повторно добавляется.

С такой проблемой сталкивались? Или я что-то упустил?

Спасибо


(Mikhail Bezroukov) #2

Второй раз для экземпляра сущности похоже устанавливается из TreeDataGrid.setSelected…

Теперь объясняется, почему когда я прохожу по разным сущностям первый раз - проблем нет, при повторном проходе цирк начинается.

При этом экземпляр listener добавляемый в AbstractInstance.addPropertyChangeListener тот же самый, т.е. он добавлен два раза.
Видимо нужна проверка на наличие такого listener в коллекции уже.


(Роман Пиняжин) #4

Здравствуйте!

Спасибо, что сообщили о проблеме.
С повторным добавлением AbstractInstance.addPropertyChangeListener проблема известна, Вы можете посмотреть задачу в нашем github репозитории: cuba-platform/cuba#1815. (Проблема касается не только TreeDataGrid).
CollectionChangeListener видимо срабатывает после сортировки по столбцу. Завёл отдельную задачу: cuba-platfom/cuba#1885.