1

Is there any way how to get column instace by filter key? Suppose you have

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

By calling DataTable#getFilters() you will obtain map containing entry {id=...} where id is variable's property name. How can I get column by property name (in this particular case by id)?

MOTIVATION

To build sql query from provided filters where filterMatchMode need to be provided in order to write the right LIKE expression for given condition. So I would like to get these pairs:

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);

One solution can be to use headerText="propertyName", since c.getHeaderText() matches filter.getKey(), I would be able to find c.getFilterMatchMode(). The drawback is obvious - hardcoding property names in element is generally bad practice - renaming of entity's properties would require to rename also column headers. Moreover, property names are not suitable for displaying ("phoneNumber" vs "Phone number").

matoni
  • 2,479
  • 21
  • 39

0 Answers0