如何通过p:dataTable

时间:2018-06-30 12:41:28

标签: primefaces jsf-2 pf-datatable

有什么方法可以通过过滤键获取列实例吗?假设你有

<p:column headerText="Something" filterBy="#{car.id}" filterMatchMode="contains"> 

通过调用DataTable#getFilters(),您将获得包含条目{id=...}的映射,其中id是变量的属性名称。如何通过属性名称(在这种情况下,通过id)获得列?

动机

从提供的过滤器构建sql查询,其中需要提供filterMatchMode以便为给定条件编写正确的LIKE表达式。所以我想得到这些对:

List<WhereFilter> whereFilters = new LinkedList<>();

for (Entry<String,Object> filter : dataTable.getFilters()) {
    String propertyName = filter.getKey(); // if value="#{car.id}", then property = "id"
    UIColumn c = dataTable.getSomehowColumnByFilterId(propertyName); // HOW?
    String matchMode = c.getFilterMatchMode();
    whereFilters.add(new WhereFilter(filter, matchMode));
}
String query = buildQuery(whereFilters, SqlDialect.HQL);

一种解决方案是使用headerText="propertyName",因为c.getHeaderText()filter.getKey()相匹配,所以我可以找到c.getFilterMatchMode()。缺点很明显-在元素中对属性名称进行硬编码通常是不明智的做法-重命名实体属性需要同时重命名列标题。此外,属性名称不适合显示(“ phoneNumber”与“ Phone number”)。

0 个答案:

没有答案