6

Primefaces v3.5を使用しています。データテーブルでは、1つの列でフィルターを使用しています。ページ自体をロードしているときに、フィルターにデフォルト値を設定するにはどうすればよいですか。

4

4 に答える 4

12

次のように、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>    
于 2013-09-16T21:10:41.070 に答える
10

正しい解決策は、フィルタされたコレクションを含む のfilteredValue属性をの属性とともに使用して、フィルタの構成をユーザーに表示することです。p:dataTablefilterValuep: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;
    }
}
于 2015-02-27T21:56:21.523 に答える
1

理想的には、データテーブルへの参照を取得し (ビューデータテーブルをバッキング 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>
于 2013-03-17T00:11:14.167 に答える