【发布时间】:2014-06-12 09:38:49
【问题描述】:
我有一个带有动态列的数据表:
<p:dataTable id="bookings" var="booking" value="#{tableBean.dataModel}"
widgetVar="bookingTable" filteredValue="#{tableBean.filteredFields}"
paginator="true" rows="15"
lazy="true" rowsPerPageTemplate="15,30,50" type="none" draggableColumns="true">
[...]
<p:columns value="#{tableBean.columns}" var="column" columnIndexVar="colIndex"
sortBy="#{booking.properties[column.property]}"
filterBy="#{booking.properties[column.property]}"
filterMatchMode="in"
styleClass="telegrotesk">
<f:facet name="header">
<h:outputText value="#{column.header}"/>
</f:facet>
<f:facet name="filter">
<p:selectCheckboxMenu label="#{column.header}" onchange="PF('bookingTable').filter()">
<f:selectItems value="#{column.possibilities}" />
</p:selectCheckboxMenu>
</f:facet>
<h:outputText value="#{booking.properties[column.property]}"/>
</p:columns>
列类似于 primefaces 示例 (http://www.primefaces.org/showcase/ui/data/datatable/filter.xhtml) 这个类:
static public class ColumnModel implements Serializable {
private String header;
private String property;
private List<SelectItem> possibilities;
public ColumnModel(Field property) {
this.header = property.getName();
this.property = property.getSqlName();
}
public String getHeader() {
return header;
}
public String getProperty() {
return property;
}
public List getPossibilities() {
return possibilities;
}
public void setPossibilities(List<SelectItem> possibilities) {
this.possibilities = possibilities;
}
}
在我的示例中,仅测试一个动态列,显示创建预订的用户。它有效,在复选框下拉菜单中显示所有用户。当我选择一个或多个用户时,函数会加载
public List<Booking> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {
[...]
}
已执行,但过滤器始终为空!
ColumnModel 中的列表可能性是SelectItems 的集合。标签始终是用户名,用户对象的值。对于用户类,我定义了一个使用 @FacesConverter(forClass = User.class) 实现 javax.faces.convert.Converter 的 Converter 类
过滤器映射总是空的,我做错了什么?
编辑
当我这样做时
<p:columns value="#{tableBean.columns}" var="column" columnIndexVar="colIndex"
sortBy="#{booking.properties[column.property]}"
filterBy="#{booking.properties[column.property]}"
filterMatchMode="in"
filterOptions="#{column.possibilities}"
styleClass="telegrotesk">
并且没有任何方面它可以正常工作,但我只能选择一个用户。
我正在使用 primefaces 5.0、jsf 2.2.1 和 glassfish v4
【问题讨论】:
标签: jsf primefaces datatable filtering lazy-loading