Primefaces Datatableを使用すると、filterMatchModeプロパティを使用して、カラムに使用するフィルタリングタイプを設定できます。PrimeFaces DataTableのfilterMatchModeはどのように動作しますか?
LazyDataModelを使用する場合は、独自の検索メソッドを実装する必要があります。これは、そのプロパティをまったく受け取らないためです。この機能は通常のDataModelにのみ有効ですか?
Primefaces Datatableを使用すると、filterMatchModeプロパティを使用して、カラムに使用するフィルタリングタイプを設定できます。PrimeFaces DataTableのfilterMatchModeはどのように動作しますか?
LazyDataModelを使用する場合は、独自の検索メソッドを実装する必要があります。これは、そのプロパティをまったく受け取らないためです。この機能は通常のDataModelにのみ有効ですか?
現在のところ、この機能はLazyDataModelのすぐに使用できる機能ではありませんが、比較的簡単に使用できます。 blemasleposted対応版のプライムフェイスフォーラムでは、残念ながら開発者からの回答はまだありません。
非侵襲的なソリューションを使用したい場合は、私を試すことができます。
FilterMatchModeがある/**
* @param tableExpr expression, starting from the view root,
* which identifies the datatable to retrieve information from
* @return map, containing pairs of {@code <filtered field id, match mode>}.
* Filtered field id is evaluated from the 'filterBy'
* attribute of the column in the following way:
* #{item.name} -> name
* #{item.category.name} -> category.name
*/
public Map<String, FilterMatchMode> getFiltersMatchMode(String tableSearchExpr) {
FacesContext context = FacesContext.getCurrentInstance();
Object component = context.getViewRoot().findComponent(tableSearchExpr);
if (null == component) {
throw new IllegalArgumentException(
"No component found for search expression: "
+ tableSearchExpr);
}
if (!(component instanceof DataTable)) {
throw new IllegalArgumentException(
"Component is not a DataTable: " + tableSearchExpr);
}
DataTable table = (DataTable) component;
Map<String, FilterMatchMode> constraints =
new HashMap<String, FilterMatchMode>(table.getColumns().size());
for (Column column : table.getColumns()) {
ValueExpression filterExpression =
column.getValueExpression("filterBy");
if (null != filterExpression) {
String filterExpressionString = filterExpression.
getExpressionString();
//evaluating filtered field id
String filteredField = filterExpressionString.substring(
filterExpressionString.indexOf('.') + 1,
filterExpressionString.indexOf('}'));
FilterMatchMode matchMode =
FilterMatchMode.fromUiParam(column.getFilterMatchMode());
constraints.put(filteredField, matchMode);
}
}
return constraints;
}
:
public enum FilterMatchMode {
STARTS_WITH("startsWith"), ENDS_WITH("endsWith"),
CONTAINS("contains"), EXACT("exact");
/**
* Value of p:column's filterMatchMode attribute
* which corresponds to this math mode
*/
private final String uiParam;
FilterMatchMode(String uiParam) {
this.uiParam = uiParam;
}
/**
* @param uiParam value of p:column's filterMatchMode attribute
* @return MatchMode which corresponds to given UI parameter
* @throws IllegalArgumentException if no MatchMode
* is corresponding to given UI parameter
*/
public static FilterMatchMode fromUiParam(String uiParam) {
for (FilterMatchMode matchMode : values()) {
if (matchMode.uiParam.equals(uiParam)) {
return matchMode;
}
}
throw new IllegalArgumentException("No MatchMode found for " + uiParam);
}
}
GitHubの問題:https://github.com/primefaces/primefaces/issues/30あなたは '置く – lazlev