DonutChart未更新

时间:2015-11-02 13:06:06

标签: jsf primefaces

您好我正在使用PrimeFaces 5.2并且我使用图表作为数据表。在页面加载时,图表为空,只需在刷新时显示图表。在搜索时,图表在刷新时没有再次更改,或者新搜索显示上一次搜索的图表。对不起我的英语不好。 我的JSF页面:

<h:form id="statisfationFilterForm">
    <h:outputText value="#{msg['media.reports.filter.date.from']}" />

    <p:calendar id="dateFrom"
                value="#{statisfationController.model.currentSatisfation.filter.startDate}"
                pattern="dd/MM/yyyy"/>
    .
    .
    .

    <p:commandButton value="#{msg['button.search']}"
                     ajax="true"
                     action="#{statisfationController.model.getLazyModel()}"
                     update=":statisfationTableForm"/>

    <p:commandButton value="#{msg['button.clear']}"
                     ajax="true"
                     action="#{statisfationController.clear()}"
                     update=":statisfationTableForm :statisfationFilterForm"/>
</h:form>

<h:form id="statisfationTableForm">
    <p:chart id="chart" type="donut"
             model="#{statisfationController.model.donutModel}"
             style="width:400px;height:300px" />

    <p:dataTable value="#{statisfationController.model.lazyModel}"
                 .
                 .
                 .

和我的满意度模型:

@PostConstruct
public void init() {
    LOGGER.debug("Initialize 'satisfationModel' bean.");
    try {
        statisticsService.setClazz(E_CMS_STATISTICS_CROSSELER.class, Integer.class);
        userInteractionService.setClazz(E_CMS_USER_INTERACTION.class, Integer.class);
        satisfationDataModel = new DataGridModel<E_CMS_USER_INTERACTION>();
        satisfationDataModel.setGridRendered(false);
        currentSatisfation = new E_CMS_USER_INTERACTION();
        currentSatisfation.setFilter(new UserSatisfactionReportFilter());
        currentSatisfation.getFilter().setBenutzers(statisticsService.getAllBenutzers());
        donutModel = new DonutChartModel();
    } catch (Exception e) {
        LOGGER.error("Exceptions while initializing 'customerstatisfation' bean!", e);
    }
}

public LazyDataModel<E_CMS_USER_INTERACTION> getLazyModel(){
.
.
.
@Override
public List<E_CMS_USER_INTERACTION> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
.
.
.
List<E_CMS_USER_INTERACTION> list = response.getList();
                        donutModel = new DonutChartModel();
                        createDonutModels(list);
                        return list;
.
.
.
}

donutModel包含良好的值,但在页面上显示上一个图表。

我知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我发现我的答案发生在数据表延迟加载:When using lazy dataTable another component does not get updated / 2nd component data is one request behind。我解决了我的问题,将图表放在数据表之后,它现在就加载了。如何在getLazyModel函数之前以及更新数据表之后的函数组件之后加载数据表之前理解组件。