Добрый день!
У меня есть следующий контроллер экрана:
@Route(value = "traffics", layout = MainView.class)
@ViewController("TrafficUiDto.list")
@ViewDescriptor("traffic-ui-dto-list-view.xml")
@LookupComponent("trafficsDataGrid")
@DialogMode(width = "64em")
public class TrafficListView extends StandardListView<TrafficUiDto> {
@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();
Map<String, Object> conditionsMap = processConditions();
boolean hasNonNullValues = conditionsMap.values().stream().anyMatch(Objects::nonNull);
List<TrafficDto> trafficDtos;
if (hasNonNullValues) {
trafficDtos = trafficService.getFilteredProcessedTraffic(PageRequest.of(offset, limit), conditionsMap);
} else {
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 trafficMapper.mapToList(trafficDtos);
}
@Subscribe("trafficsDataGrid.refresh")
public void onTrafficsDataGridRefresh(final ActionPerformedEvent event) {
Map<String, Object> conditionsMap = processConditions();
LoadContext<TrafficUiDto> loadContext = trafficsDl.createLoadContext();
trafficsDl.setLoadDelegate(this::trafficsDlLoadDelegate);
loadDataWithFilter(loadContext, conditionsMap);
}
@Subscribe("timerToLoadDataGrid")
public void onTimerTimerAction(final Timer.TimerActionEvent event) {
trafficsDl.load();
}
timerAction отрабатывает каждые 5 секунд. Если я выбрал в фильтре какое-то условие, то фильтрация срабатывает по автообновлению. То есть отрабатывает onTimerTimerAction
, далее я попадаю в метод trafficsDlLoadDelegate
, где там уже Map<> conditionsMap
не пустая, и dataGrid
отфильтровывается согласно условию из фильтра. А должно быть так, что таблица фильтруется только после срабатывания onTrafficsDataGridRefresh
, то есть только по кнопке Применить фильтр
.
Как мне добиться такого поведения?