我构建了一个相对简单的 DataTable 并尝试使用过滤器功能和分页功能。
在参考primefaces 展示时,我为Customer
班级中的每个字段创建了一个列。
这是我的“控制器”Bean:
@SessionScoped
@Named
public class CustomerListController implements Serializable{
public static final long serialVersionUID = //UID;
private List<Customer> filteredCustomers;
private List<Customer> allCustomers;
public CustomerListController(){
//some Class that generates a list of sufficiently many
//dummy customers on instantiation
this.allCustomers = new CustomerListProducer().getCustomers();
}
public List<Customer> getFilteredCustomers{
return this.filteredCustomers;
}
public void setFilteredCustomers(List<Customers> list){
this.filteredCustomers = list;
}
public List<Customer> getAllCustomers(){
return this.allCustomers;
}
}
我使用以下数据表来呈现这个:
<p:dataTable paginator="true" rows="18" scrollRows="15" scrollable="true"
scrollHeight="500" var="customer" value="#{customerListController.allCustomers}"
scrollable="true" id="customerTable"
filteredValue="#{customerListController.filteredCustomers}" widgetVar="table">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search all fields:" />
<h:inputText id="globalFilter" onkeyup="table.filter()" />
</p:outputPanel>
</f:facet>
<p:Column id="nameColumn" filterBy="name" sortBy="name"
headerText="Customer" filterMatchMode="contains">
<h:outputText value="#{customer.name}" />
</p:Column>
<!-- Some more columns in the exactly same
manner as this changes only in Customer attribute-->
</p:dataTable>
当我在任何给定的过滤器字段中按任何键时,表会丢失所有行,即使清除字段也不会显示任何行。
刷新页面时,我得到了预期的行数和页面数。
我会尽力按要求提供修改。
编辑:
我正在使用与 maven 一起安装的 Primefaces 版本 4.0.0。
我一直在研究 FF 下的控制台并发现以下内容:
响应 XML 为空,保存节点条目以更新表。不会抛出任何 JavaScript 错误,并且每次击键都会更改随“表数据”一起发送的视图状态 ID。