nabildridi / SpringBootGenericPagingFilteringForPrimengTable

Spring Boot data jpa generic paging, sorting and filtering for PrimeNg tables

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Returns empty array when using p-multiSelect

PatrikMalina opened this issue · comments

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: []

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