@Override @SuppressWarnings("unchecked") protected Map<String, String> getModifiedAttributeValues( Arguments arguments, Element element, String attributeName) { Map<String, String> attrs = new HashMap<String, String>(); BroadleafRequestContext blcContext = BroadleafRequestContext.getBroadleafRequestContext(); HttpServletRequest request = blcContext.getRequest(); String baseUrl = request.getRequestURL().toString(); Map<String, String[]> params = new HashMap<String, String[]>(request.getParameterMap()); String key = ProductSearchCriteria.SORT_STRING; String sortField = element.getAttributeValue(attributeName); List<String[]> sortedFields = new ArrayList<String[]>(); String[] paramValues = params.get(key); if (paramValues != null && paramValues.length > 0) { String sortQueries = paramValues[0]; for (String sortQuery : sortQueries.split(",")) { String[] sort = sortQuery.split(" "); if (sort.length == 2) { sortedFields.add(new String[] {sort[0], sort[1]}); } } } boolean currentlySortingOnThisField = false; boolean currentlyAscendingOnThisField = false; for (String[] sortedField : sortedFields) { if (sortField.equals(sortedField[0])) { currentlySortingOnThisField = true; currentlyAscendingOnThisField = sortedField[1].equals("asc"); sortedField[1] = currentlyAscendingOnThisField ? "desc" : "asc"; } } String sortString = sortField; String classString = ""; if (currentlySortingOnThisField) { classString += "active "; if (currentlyAscendingOnThisField) { sortString += " desc"; classString += "asc "; } else { sortString += " asc"; classString += "desc "; } } else { sortString += " asc"; classString += "asc "; params.remove(ProductSearchCriteria.PAGE_NUMBER); } if (allowMultipleSorts) { StringBuilder sortSb = new StringBuilder(); for (String[] sortedField : sortedFields) { sortSb.append(sortedField[0]).append(" ").append(sortedField[1]).append(","); } sortString = sortSb.toString(); if (sortString.charAt(sortString.length() - 1) == ',') { sortString = sortString.substring(0, sortString.length() - 1); } } params.put(key, new String[] {sortString}); String url = ProcessorUtils.getUrl(baseUrl, params); attrs.put("class", classString); attrs.put("href", url); return attrs; }