I may have an improvment request ( ) concerning the fact that the
Code: Select all
filterMatchMode
Code: Select all
public abstract List<T> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String,String> filters, Map<String, FilterConstraint> filtersMatchMode);
This improvment needs a new method in DataTable.java, which will be getFiltersConstraints(), which simply return all the column.getFilterConstraint() in one collection.
This seems easy to implement, and could be very usefull (I'm actually having some troubles using a filterOptions on a lazy datatable because of this). In fact, like other thing I discussed here, I think I'm will implement this myself for 2.2.1 and provide a patch. So if anybody is interested in that, stay tuned !
EDIT : I think that use getFilterMatchMode could be better becaused of the fact that it's just using String instead of a specified type... Maybe some constants like STARTS_WITH_MATCH_MODE, ENDS_WITH_MATCH_MODE, CONTAINS_MATCH_MODE and EXACT_MATCH_MODE should be turned public so they can be used in controllers ?
EDIT 2 : Here is the patch to make this working to those who are interested You obviously need to change all your implementation of LazyDataModel to match the new signature
Code: Select all
Index: src/main/java-templates/org/primefaces/component/column/ColumnTemplate.java
===================================================================
--- src/main/java-templates/org/primefaces/component/column/ColumnTemplate.java (revision 4532)
+++ src/main/java-templates/org/primefaces/component/column/ColumnTemplate.java (working copy)
@@ -17,10 +17,10 @@
}
private FilterConstraint filterConstraint = null;
- private final static String STARTS_WITH_MATCH_MODE = "startsWith";
- private final static String ENDS_WITH_MATCH_MODE = "endsWith";
- private final static String CONTAINS_MATCH_MODE = "contains";
- private final static String EXACT_MATCH_MODE = "exact";
+ public final static String STARTS_WITH_MATCH_MODE = "startsWith";
+ public final static String ENDS_WITH_MATCH_MODE = "endsWith";
+ public final static String CONTAINS_MATCH_MODE = "contains";
+ public final static String EXACT_MATCH_MODE = "exact";
public FilterConstraint getFilterConstraint() {
String filterMatchMode = getFilterMatchMode();
Index: src/main/java-templates/org/primefaces/component/datatable/DataTableTemplate.java
===================================================================
--- src/main/java-templates/org/primefaces/component/datatable/DataTableTemplate.java (revision 4532)
+++ src/main/java-templates/org/primefaces/component/datatable/DataTableTemplate.java (working copy)
@@ -335,6 +335,14 @@
getStateHelper().put("filters", filters);
}
+ public Map<String,String> getFiltersMatchMode() {
+ return (Map<String,String>) getStateHelper().eval("filtersMatchMode", new HashMap<String,String>());
+ }
+
+ public void setFiltersMatchMode(Map<String,String> filters) {
+ getStateHelper().put("filtersMatchMode", filters);
+ }
+
private List<Integer> selectedRowIndexes = new ArrayList<Integer>();
public void addSelectedRowIndex(Integer rowIndex) {
Index: src/main/java/org/primefaces/component/datatable/DataHelper.java
===================================================================
--- src/main/java/org/primefaces/component/datatable/DataHelper.java (revision 4532)
+++ src/main/java/org/primefaces/component/datatable/DataHelper.java (working copy)
@@ -110,21 +110,28 @@
if(table.isLazy()) {
Map<String,String> filters = new HashMap<String, String>();
+ Map<String, String> filtersMatchMode = new HashMap<String, String>();
Map<String,Column> filterMap = table.getFilterMap();
for(String filterName : filterMap.keySet()) {
Column column = filterMap.get(filterName);
String filterValue = params.get(filterName).toLowerCase();
-
+ String filterMatchMode = column.getFilterMatchMode();
+
if(!isValueBlank(filterValue)) {
String filterField = resolveField(column.getValueExpression("filterBy"));
filters.put(filterField, filterValue);
+ filtersMatchMode.put(filterField, filterMatchMode);
}
+
}
table.setFilters(filters);
+ table.setFiltersMatchMode(filtersMatchMode);
+ //loading data so table.getRowCount() is up to date
+ table.loadLazyData();
//Metadata for callback
if(table.isPaginator()) {
RequestContext.getCurrentInstance().addCallbackParam("totalRecords", table.getRowCount());
Index: src/main/java/org/primefaces/model/LazyDataModel.java
===================================================================
--- src/main/java/org/primefaces/model/LazyDataModel.java (revision 4532)
+++ src/main/java/org/primefaces/model/LazyDataModel.java (working copy)
@@ -80,5 +80,5 @@
this.rowCount = rowCount;
}
- public abstract List<T> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String,String> filters);
+ public abstract List<T> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String,String> filters, Map<String, String> filtersMatchMode);
}
\ No newline at end of file