Добрый день!
Для загрузки данных я использую метод trafficsDlLoadDelegate
:
@Install(to = "trafficsDl", target = Target.DATA_LOADER)
public List<TrafficUiDto> trafficsDlLoadDelegate(final LoadContext<TrafficUiDto> loadContext) {
LoadContext.Query query = loadContext.getQuery();
if (query == null) {
return Collections.emptyList();
}
int offset = query.getFirstResult() / query.getMaxResults();
int limit = query.getMaxResults();
List<TrafficDto> trafficDtos;
Sort.Direction direction = getSortDirection(query.getSort());
if (direction == null) {
trafficDtos = trafficService.getPaginatedProcessedTraffic(PageRequest.of(offset, limit));
} else {
String property = getSortProperty(query.getSort());
trafficDtos =
trafficService.getSortedProcessedTraffic(PageRequest.of(offset, limit), direction, property);
}
return mapToUiDto(trafficDtos);
}
при переходе между страницами в trafficsDataGrid
каждый раз вызывается метод trafficsDlLoadDelegate
и все работает корректно.
Также у меня есть методы, которые определяют работу кнопок Применить фильтр
и Очистить фильтр
. Их код приведен ниже:
@Subscribe("trafficsDataGrid.refresh")
public void onTrafficsDataGridRefresh(final ActionPerformedEvent event) {
Map<String, Object> conditionsMap = processConditions();
LoadContext<TrafficUiDto> loadContext = trafficsDl.createLoadContext();
LoadContext.Query query = loadContext.getQuery();
if (query != null) {
int offset = query.getFirstResult() / query.getMaxResults();
int limit = query.getMaxResults();
boolean hasNonNullValues = conditionsMap.values().stream().anyMatch(Objects::nonNull);
if (hasNonNullValues) {
List<TrafficDto> filteredProcessedTraffic =
trafficService.getFilteredProcessedTraffic(PageRequest.of(offset, limit), conditionsMap);
trafficsDl.setLoadDelegate(innerLoadContext -> mapToUiDto(filteredProcessedTraffic));
trafficsDl.load();
}
}
}
@Subscribe("trafficsDataGrid.clear")
public void onTrafficsDataGridClear(final ActionPerformedEvent event) {
filterProcessInfoComboBox.clear();
filterTablesNameComboBox.clear();
filterAttributesNameComboBox.clear();
filterRequestTypeComboBox.clear();
filterTimestampRequestDateTimePicker.clear();
LoadContext<TrafficUiDto> loadContext = trafficsDl.createLoadContext();
LoadContext.Query query = loadContext.getQuery();
if (query != null) {
int offset = query.getFirstResult() / query.getMaxResults();
int limit = query.getMaxResults();
List<TrafficDto> paginatedProcessedTraffic =
trafficService.getPaginatedProcessedTraffic(PageRequest.of(offset, limit));
trafficsDl.setLoadDelegate(innerLoadContext -> mapToUiDto(paginatedProcessedTraffic));
trafficsDl.load();
}
}
После того, как срабатывает action onTrafficsDataGridRefresh
или onTrafficsDataGridClear
, у меня ломается пагинация. Я так понимаю это из-за того, что я делаю setLoadDelegate
в каждом методе своих action’ов, он как бы получается перезатирает работу метода trafficsDlLoadDelegate
, при переходе между страницами он больше не вызывается. Но если перейти в меню в другую вкладку и вернуться назад, пагинация снова начинает работать нормально, т.к. метод trafficsDlLoadDelegate
снова отрабатывает.
Как можно пофиксить эту проблему?