Как получить столбец по ключу фильтра в p: dataTable - PullRequest
0 голосов
/ 30 июня 2018

Есть ли способ получить столбец с помощью ключа фильтра ? Предположим, у вас есть

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

...