Я пытаюсь прикрепить событие AJAX к таблице данных в моем приложении PrimeFaces, чтобы некоторые компоненты диаграммы, которые дают различные сводные представления содержимого таблицы, обновлялись соответствующим образом при ее фильтрации.
У меня естьпопытался использовать компонент PrimeFaces AJAX для асинхронного перерисовывания диаграмм, вызванного фильтрацией таблицы.
Я добавил следующее в таблицу данных в моем xhtml:
<p:ajax event="filter" listener="#{myView.updateAfterFilter()}" />
и вmy java:
public void updateAfterFilter() throws JSONException, IOException, ParseException, IllegalAccessException {
List<String> hashes = null;
try{
//Call a function to return a list of strings corresponding to hashes of the entries in the filtered table
hashes = filteredElementHashes();
//Resubmit the query, retrieving only the data for the entries in the filtered table, and redraw the charts
chartsData = list.parseData(queryString, null, null, hashes);
makeCharts();
} catch (NullPointerException ex) {
System.err.println("Null hashes!");
}
}
//And for illustration, the hash function that reads in the data from this.filteredElements
public List<String> filteredElementHashes() throws IllegalAccessException {
List<String> hashes = new ArrayList<>();
Field[] fields = DataElement.class.getFields();
for (DataElement element : this.filteredElements) {
String temp = new String();
//Append content of each field
for (Field field : fields) {
temp += field.get(element).toString();
}
//Remove whitespace, order, and pass to hash function
temp = MiscFunctions.hashString(temp);
hashes.add(temp);
}
return hashes;
}
Функция updateAfterFilter вызывается компонентом AJAX при фильтрации таблицы, но она получает версию this.filteredElements до того, как будет применен текущий фильтр;это заставляет диаграммы отображать информацию, которая не синхронизирована с таблицей.Однако, когда я связываю updateAfterFilter с компонентом кнопки и запускаю его вручную после того, как отфильтрую таблицу, поведение будет таким, как ожидалось.Я хотел бы, чтобы диаграммы перерисовывались после , когда таблица перерисовывалась, тогда как текущее поведение согласуется с процессом регенерации данных диаграммы, начинающимся до регенерации таблицы с новыми фильтрами на месте.