На какое событие нужно подписаться, чтобы при сохранении сущности (закрытия карточки), сущность обновлялась бы в браузере автоматически?

Добрый день! Подскажите пожалуйста: при открытии карточки сущности, изменения в ней полей и нажатии кнопки “Сохранить”, информация в БД обновляется, но при этом в браузере информация не обновляется, пока не нажать либо на кнопку “Обновить” в фильтрах, либо только после перезагрузки страницы.
image
Как сделать так, чтобы информация автоматически обновлялась в браузере при закрытии карточки сущности?
Эта проблема порождает также другую: если не обновить страницу, а попробовать удалить запись в dataGrid, получаю такую ошибку:
image

Вы открываете редактор через стандартный EditAction? Или сами вызываете dialogWindows.detail?

Если второе, то нужно открывать dialogWindows через dialogWindows.detail(table) и тогда сущность должна обновится в таблице

1 симпатия

спасибо! помогло)

Может быть подскажете, еще один вопрос в продолжение первого: у dataGrid есть кнопка “Запустить”, по ее нажатию происходит следующая логика:

    @Subscribe("somethingDataGrid.start")
    public void onSomethingDataGridStart(final ActionPerformedEvent event) {
        Set<Something> something = somethingDataGrid.getSelectedItems();
        for (Some some : something) {
            service.start(something.getId());
        }
        somethingDl.load();
        notifications.create(messages.getMessage(
                        "ru.ctsg.damdbf.manager.view.something/start"))
                .withType(Notifications.Type.SUCCESS)
                .withPosition(Notification.Position.MIDDLE)
                .show();
    }

Метод старта (а также стопа) выглядит следующим образом:

    private void performAction(UUID id, ActionType actionType) {
        Something s = repository.findById(id)
                .orElseThrow(() -> new EntityNotFoundException(messages.getMessage(SOMETHING_NOT_FOUND)));

        SomethingActionDto dto = somethingMapper.toSomethingActionDto(something);
        dto.setAction(actionType.getId());

        if (actionType == ActionType.START) {
            handler.startCapture(dto);
            something.setStatus(Status.STARTING);
            something.setLastStartDate(new Date());
        } else {
            handler.stopCapture(dto);
            something.setStatus(Status.STOPPING);
        }
        repository.save(something);
    }

Происходит следующая логика: запускается сущность, у нее меняется статус на “Запускается”. Далее отправляется сообщение в Kafka, и когда приходит ответ, статус меняется на “Запущен”. Проблема в том, что статус не меняется опять же автоматически, а только при обновлении страницы.

Подскажите, как-то можно это обойти?

Вопрос довольно таки сложный, и наврядли я смогу подсказать какое-то правильное решение. Как по мне, в таком случае лучше самому вообще не пытаться обновлять данные в таблице. Мб лучше отправлять оповещение в экран что пришли обновления из Кафки.

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

Как мне кажется. При работе в такой системе лучше добавить еще один статус (отправлен в кафку или еще как обозвать зависит от вашей системы) и при отправке в кафку собственно ставить данный статус.

Как вариант вы можете при получении событий из кафки отправлять event через UiEventPublisher всем юзерам. И в экране с данной таблицой подписаться на это событие чтоб обновлять данные (Или как я написал ранее оповещение что есть обновления).

Но тут надо понимать как у вас устроено получение данных из кафки. Если вы получаете сообщение по 1 то нужно в экране делать отложенную загрузку, чтоб тот не перегружал данные на каждое сообщение из кафки (По этому оповещение как по мне лучше, Хотя заспамить экран этими оповещениями тож не оч хорошо).

Наврядли это как то решит проблему с “Объект был изменен…”

Юзер может начать редактировать сущность в статусе “отправлено в кафку”. Здесь надо вешать лок на редактор, чтоб юзер не мог менять сущность пока сущность не будет в статусе Запущен