Returns empty array when using p-multiSelect
PatrikMalina opened this issue · comments
PatrikMalina commented
When using p-multiselect from primeng for filtering it sends values as an array. Because of that, it returns an empty array.
sending: "field":{"value":["value1","value2","value3"],"matchMode":"equals"}
returns: []
PatrikMalina commented
Possible Solution
In public class ColumnFilter add
private ArrayList<String> valuesToSearch;
...
public ArrayList<String> getValuesToSearch() {
return valuesToSearch;
}
....
public void setValueToSearch(JsonNode valueToSearch) {
ArrayList<String> temp = new ArrayList<String>();
Iterator<JsonNode> rulesIter = valueToSearch.elements();
while (rulesIter.hasNext()) {
temp.add(rulesIter.next().asText());
}
this.valuesToSearch = temp;
}
in Class SearchBuilder line 380
if (valueToSearch.isEmpty() && jsonFilter.get("value") instanceof ArrayNode) {
columnFilter.setValueToSearch(jsonFilter.get("value"));
}
in line 428 function getColumnQuery to
private String getColumnQuery(ColumnFilter cf, String fieldName) {
String query = null;
String rsqlFragment = getRsqlFragmentForMatchMode(cf.getMatchMode(), cf.getType());
if (cf.getType() != ColumnType.DATE && !cf.getValueToSearch().isEmpty()) {
rsqlFragment = rsqlFragment.replace("[placeholder]", cf.getValueToSearch());
query = fieldName + rsqlFragment;
} else if (cf.getType() != ColumnType.DATE) {
List<String> res = new ArrayList<String>();
for (int i = 0; i < cf.getValuesToSearch().size(); i++ ) {
String value = cf.getValuesToSearch().get(i);
if (!value.isEmpty()) {
res.add(fieldName + rsqlFragment.replace("[placeholder]", value));
}
}
query = "([values])";
query = query.replace("[values]", StringUtils.collectionToDelimitedString(res, " or "));
}
else {
query = getDatesQuery(cf, rsqlFragment, fieldName);
}
return query;
}
}