Primefaces v3.5を使用しています。データテーブルでは、1つの列でフィルターを使用しています。ページ自体をロードしているときに、フィルターにデフォルト値を設定するにはどうすればよいですか。
4 に答える
次のように、primefaces の column タグの filterValue プロパティを使用します。
<p:datatable ... widgetVar="dataTableWidgetVar">
<p:column ... filterValue="#{BackingBean.defaultValue}">
次に、ページの準備ができたら、フィルターをトリガーするための単純な関数呼び出しを JavaScript で作成します (ウィジェット変数は PF の jQuery を介して作成されます)。
<script type="text/javascript" target="body">
$j = jQuery;
$j(document).ready( function() {
dataTableWidgetVar.filter();
});
</script>
正しい解決策は、フィルタされたコレクションを含む のfilteredValue
属性をの属性とともに使用して、フィルタの構成をユーザーに表示することです。p:dataTable
filterValue
p:column
フィルタをセッション Bean に保存しておくp:dataTable
には、フィルタリングされたデータも保持する必要があります。はp:dataTable
、最初の並べ替えを実行しません。
この例の JSF を確認してください。
<p:dataTable
value="#{usersBean.employees}"
var="e"
filteredValue="#{userListState.filteredValue}">
<p:ajax event="filter" listener="#{userListState.onFilterChange}"/>
<p:column
headerText="user"
filterBy="#{e.user.id}"
filterValue="#{userListState.filterState('user.id')}">
#{e.user.id}
</p:column>
</p:dataTable>
この管理対象 Bean でサポートされています。
@Named(value = "userListState")
@SessionScoped
public class UserListState implements Serializable{
private Map<String, String> filterState = new HashMap<String, String>();
private List<Employee> filteredValue;
public UserListState() {
}
public void onFilterChange(FilterEvent filterEvent) {
filterState = filterEvent.getFilters();
filteredValue =(List<Employee>) filterEvent.getData();
}
public String filterState(String column) {
return filterState.get(column);
}
public List<Employee> getFilteredValue() {
return filteredValue;
}
public void setFilteredValue(List<Employee> filteredValue) {
this.filteredValue = filteredValue;
}
}
理想的には、データテーブルへの参照を取得し (ビューデータテーブルをバッキング Bean 表現にバインドするか、DOM ツリーをたどって)、これを行う
Map<String,String> theFilterValues = new HashMap<String,String>();
theFilterValues.put("filterColumn","fooValue");
myDataTable.setFilters(theFilterValues);
デフォルトのテキスト値を設定しますが、フィルターを適用しない場合があります。
または、primefaces の問題キューのこの投稿では、jquery ベースのオプションが提案されています
<script>
jQuery(document).ready(function() {
jQuery('input[id*="datumCol"]').val('2012-07-17');
});
</script>