Jsf 如何在Ajax更新后调用方法
我有两个选择菜单:第一个选择用户想要的对象区域、等级、年龄,第二个过滤它 例如: 该地区有西部、北部、南部和东部 等级有A、B、C和D 因此,当用户选择GROUPBY选项时,侦听器调用onChangeGroupBy,加载所选选项的整个列表。因此,如果用户选择了Region,则onChangeGroupBy会设置selectedFilterBy=[西、北、南、东] 此外,我还更新了一个过滤器,名为flyoutId:cardsPanelId。第二个过滤器使用用户在此处的2个SelectOne菜单上选择的相同输入。onchangefilter方法通过过滤列表来绘制图表,并为第二个过滤器设置输入 问题是:我想选择group by=grades和filter=D。在我更改A、B、C和D之间的选项时,第二个过滤器和图表会正确更新。之后,如果选择group by=region,则我的过滤器将更新为西、北、南和东,但不会调用onChangeFilterBy,因此过滤器和图表不会更新,但我需要更新它 我该怎么做?我试图强制onChangeGroupBy在方法末尾调用onChangeFilterBy,但这会导致问题,因为有时filterBy包含旧值。例如:filterBy=[A、B、C、D],但selectedGroupBy是Region xhtml 豆子Jsf 如何在Ajax更新后调用方法,jsf,primefaces,Jsf,Primefaces,我有两个选择菜单:第一个选择用户想要的对象区域、等级、年龄,第二个过滤它 例如: 该地区有西部、北部、南部和东部 等级有A、B、C和D 因此,当用户选择GROUPBY选项时,侦听器调用onChangeGroupBy,加载所选选项的整个列表。因此,如果用户选择了Region,则onChangeGroupBy会设置selectedFilterBy=[西、北、南、东] 此外,我还更新了一个过滤器,名为flyoutId:cardsPanelId。第二个过滤器使用用户在此处的2个SelectOne菜单上选
我相信您需要做的是为p:ajax标记添加一个事件属性 特别是:
<p:ajax event="change" update="@(.dashboards) filterPanel flyoutId:cardsPanelId" process="@this" listener="#{topicBean.dashboardHandler.onChangeGroupBy()}" oncomplete="dashboardCharts.loadDashboards()"/>
这将确保在更改选择时调用侦听器。为什么?存在默认事件。在p:selectOneMenu的情况下,它是valueChange。您不显示您的bean是Requestcoped还是其他作用域?另外process=@这将只处理SelectOne,因此如果您使用的是RequestScoped bean,则不会提交另一个SelectOne的另一个值,因此将始终为NULL。
public void onChangeGroupBy() {
switch (selectedGroupBy) {
case REGION:
this.setFilterBy(regionSelectItems);
onChangeFilterBy();
break;
case GRADEs:
this.setFilterBy(gradesSelectItems);
onChangeFilterBy();
break;
}
}
public void onChangeFilterBy() {
String selectedGroupBy = this.selectedGroupBy;
List<Card> cards = new ArrayList<>();
this.model.resetFilters();
switch (selectedGroupBy) {
case REGION:
this.model.setSelectedRegion(Collections.singletonList(selectedFilterBy));
for (Card card : allCards) {
//filter in the list and add in cards
}
generateChart(chartOne, cards);
generateChart(chartTwo, cards);
generateChart(chartThree, cards);
break;
case GRADES:
this.model.setSelectedGrades(Collections.singletonList(selectedFilterBy));
for (Card card : allCards) {
//filter in the list and add in cards
}
}
generateChart(chartOne, cards);
generateChart(chartTwo, cards);
generateChart(chartThree, cards);
break;
}
this.model.secondFilter();
}
<p:ajax event="change" update="@(.dashboards) filterPanel flyoutId:cardsPanelId" process="@this" listener="#{topicBean.dashboardHandler.onChangeGroupBy()}" oncomplete="dashboardCharts.loadDashboards()"/>