Есть ли способ получить столбец с помощью ключа фильтра ? Предположим, у вас есть
<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()
. Недостаток очевиден - жесткое кодирование имен свойств в элементе, как правило, является плохой практикой - переименование свойств объекта потребовало бы переименования также заголовков столбцов. Кроме того, имена свойств не подходят для отображения («номер телефона» против «номер телефона»).