JSF保留旧数据

时间:2018-08-15 13:15:20

标签: java jsf primefaces

我有一个PrimeFaces按钮,该按钮应该通过Java处理数据并将其显示在dataTable中。

这是代码:

    <p:dataTable rowIndexVar="rowIndex" var="report" 
        id="TableResult" 
        style="height:685px;width: 97vw;" 
        value="#{reportResultController.resultRows}" 
        resizableColumns="true"
        scrollable="true"
        scrollHeight="95%"
        scrollRows="30"
        liveScroll="true"
        lazy="false"/>

和按钮呈现表的数据():

           <p:commandButton value="Report "
                action="#{ReportController.produceReport}" id="produce_report"
                update="TableResult"
                process="TableResult"/>

这是Java部分

    public void produceReport() {
        resultRows = reportResultUtils.runReport(rph, rowsLimit); //Returning List of rows
}

    public List<Object[]> getResultRows() {
    return resultRows;
}

数据处理正常。 问题在于,在我两次按下按钮以获取相同数据的情况下,我第一次看到结果,而下次我看到结果却翻倍而不是一次。

第一次

ID NAME

1个大卫

2乔

第二次

ID NAME

1个大卫

2乔

1个大卫

2乔

第三次和第四次将其保持为仅第二次的两倍。

如果要更改参数以获取另一个表,则它会清除表而不混淆数据。

在resultRows var中设置新数据之前,我该怎么做才能只显示一次或删除表中的数据?

1 个答案:

答案 0 :(得分:0)

原来是PrimeFace的bug

确实如@Kukeltje所述,问题出在liveScroll="true"上。 当我删除它时,它会起作用。

因此,解决方法是将Rows属性添加到与scrollRows相同大小的DataTable中:

  <p:dataTable rowIndexVar="rowIndex" var="report" 
    id="TableResult" 
    style="height:685px;width: 97vw;" 
    value="#{reportResultController.resultRows}" 
    resizableColumns="true"
    scrollable="true"
    scrollHeight="95%"
    scrollRows="30"
    rows="30"  <!-- This is the solution-->
    liveScroll="true"
    lazy="false"/>