Не обновляются данные при перезагрузке страницы

Добрый день, при добавлении сущности через рест апи в части приложения на платформе куба при нажатии f5 не происходит обновление данных, сейчас есть код который подтягивает данные при нажатии на любую часть экрана:

dataSource.addItemChangeListener(e -> this.applicationsTable.refresh());

однако без нажатия и просто после перезагрузке страницы обновления не происходит.

Добрый день.

При нажатии F5, CMD+R и т.п. происходит перезагрузка вкладки браузера (полезно при работе со стилями), а не перезагрузка экрана приложения, т.е. данные перезагружаться не будут.

Для перезагрузки данных можно использовать кнопку Поиск фильтра или добавить специальное действие Refresh для таблицы.

Глеб

каким образом можно сделать рефреш для таблицы?

В дополнение к

Можно самостоятельно перезагрузить источник данных.

пробовала добавлять листнеры на закрытие в контроллере экрана, но это не помогло

@Override
public void addCloseListener(CloseListener listener) {
super.addCloseListener(e -> dataSource.refresh());
}

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

Есть экран с заявками и связанный с ним контроллер ApplicationBrowse, в нем есть метод init:

@Override
public void init(Map<String, Object> params) {
    super.init(params);
    currentDate = DateUtils.truncate(timeSource.currentTimestamp(), Calendar.DAY_OF_MONTH);
    daysToHighlightOverdue = -soesgUIConfig.getDaysToHighlightOverdueApplications();

    applicationsTable.setStyleProvider((entity, property) -> {...};

    String categoryName = (String) params.get("categoryName");
    Date publishedDate = (Date) params.get("publishedDate");
    //Set query for column chart
    setQueryByCategoryAndDate(categoryName, publishedDate);

    applicationsTableView = new EditAction(applicationsTable, WindowManager.OpenType.THIS_TAB, "view") {
        @Override
        public String getCaption() {
            return getMessage("application.view.viewApplication");
        }

        @Override
        public String getWindowId() {
            return "soesg$Application.view";
        }
    };
    applicationsTable.addAction(applicationsTableView);

    applicationsTableEdit.setEditorCloseListener(entity -> updateSelectedItem());
    applicationsTableView.setAfterCommitHandler(entity -> updateSelectedItem());

    applicationsTable.setItemClickAction(applicationsTableView);

    applicationsTable.addAction(new AbstractAction("history") {...};

    applicationsTable.addAction(new AbstractAction("convert") {...}
  
    applicationsTableCreate.setInitialValues(ParamsMap.of("receivedTs", timeSource.currentTimestamp(),
            "status", ApplicationStatus.NEW));

    applicationsTable.sortBy(applicationsTable.getDatasource().getMetaClass().getPropertyPath("number"), false);

    this.dataSource.addItemChangeListener(e -> this.updateStartProcessAvailability((Application) e.getItem()));
    this.dataSource.addItemChangeListener(e -> this.applicationsTable.refresh());
}

При добавлении сущности через рест апи обновление данных происходит только если нажать на часть экрана, автоматически данные не подтягиваются, пробовала добавлять applicationsTableView.setEditorCloseListener(e -> dataSource.refresh()), это тоже не помогло

Экраны просмотра не отслеживают создание сущностей не текущим пользователем (REST API, создание сущности через экран просмотра но в другой вкладке браузера или другим пользователем), поэтому, как я писал выше, Вы можете использовать кнопку Поиск фильтра или добавить специальное действие Refresh для таблицы.

В Вашем коде я не увидел пример этого, но в любом случае я бы не советовал так делать, чтобы не создавать лишние запросы к БД по любому клику.

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

Точно так же, как и любые другие стандартные действия Create, Edit, Remove, Excel и т.д. Вот ссылка на документацию.

судя по сэмплеру, если я правильно понимаю, действия находящиеся в actions, в том числе и рефреш, должны быть привязаны к определённой кнопке, что подразумевает обновленные данных при нажатии этой кнопки, а не при обновлении всей страницы
https://demo10.cuba-platform.com/sampler/#main/1/sample?id=action-table

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

задача состоит в том чтобы данные загружались при обновлении страницы браузера, либо по нажатию клавишы ф5, а не при нажатии специальной кнопки

Вы можете добавить действие для всего экрана с шорткатом, например F5 (в таком случае стандартное поведение браузера по нажатию на F5 перезапишется):

<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
...>

    <dsContext>
   ...
    </dsContext>

    <actions>
        <action id="refreshData" invoke="refreshData" shortcut="F5"/>
    </actions>

    <layout>
...
    </layout>
</window>
public void refreshData() {
    usersDs.refresh();
}

для ф5 такой вариант сработал, спасибо, а для кнопки обновления в браузере нет, может есть универсальный вариант подтягивания данных и в случае нажатия клавиши ф5 и в случае нажатия кнопки браузера?

попробовала добавить листенер в контроллер экрана в метод инит, но это тоже не помогло

getWrappedWindow().addCloseListener(e -> applicationsTable.refresh());

Как я писал выше:

В общем случае для перезагрузки данных используется refresh метод источника данных.

Если у Вас что то не работает, приложите, пожалуйста, проект в котором проблема воспроизводится.

Глеб


каким образом можно перезагрузить данные одновременно с перезагрузкой экрана приложения?

Способом, который я описал выше.

это единственный способ обновить данные вместе с экраном приложения?