我有一个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中设置新数据之前,我该怎么做才能只显示一次或删除表中的数据?
答案 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"/>