在页面之间导航时,我需要保留过滤后的数据。将数据输入数据表的过滤器单元格后,它会显示正确的过滤行。如果过滤器单元格中最后输入的数据与要显示的任何数据行都不匹配,并且当我导航到另一个页面并返回时 - 不会呈现列标题和过滤器单元格。仅显示分页器。如果过滤器单元格中最后输入的数据与某些数据行匹配,则它可以正常工作。如果我不离开带有数据表的页面,它也可以正常工作。
jsf代码:
<p:dataTable id="tableId" var="intance" widgetVar="instance"
value="#{model.rows}" filteredValue="#{model.filteredRows}"
sortBy="#{model.sortBy}" sortMode="multiple" rows="5"
rowsPerPageTemplate="5, 15" paginator="true" paginatorPosition="bottom">
<p:ajax event="filter" listener="#{model.onFilter}"/>
<p:ajax event="sort" listener="#{model.onSort}"/>
<p:columns id="columnId" value="#{instance.columnsData}"
var="instanceColumn" columnIndexVar="ind" rendered="true"
sortBy="#{instance.columnsData[ind]}"
filterBy="#{instance.columnsData[ind]}" filterMatchMode="contains"
filterValue="#{model.tableFilters[''.concat(ind)]}"
headerText="#{labels[ind]}">
<h:outputText value="#{instance.columnsData[ind]}"/>
</p:columns>
</p:dataTable>
爪哇代码:
public class Model {
private List<MyRow> filteredRows;
private List<MyRow> rows;
private Map<String, String> tableFilters;
public void onFilter(FilterEvent event) {
tableFilters = event.getFilters();
if (MapUtils.isEmpty(tableFilters)) {
filteredRows = null;
}
}
public void List<MyRow> getRows() {
//retreve data from service and transform to List<MyRow>)
return rows;
}
/* getters and setter */
}
public class MyRow {
private List<Object> columnsData;
/* getters and setters */
}
有什么想法吗?代码对我来说看起来不错,应该可以工作。我使用primefaces 3.5。
谢谢