在primefaces数据表过滤器中设置默认值

时间:2013-03-16 14:10:21

标签: jsf jsf-2 primefaces

我正在使用primefaces v3.5。在数据表中我在一列上使用过滤器。 如何在加载页面时为过滤器设置默认值。

4 个答案:

答案 0 :(得分:10)

在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>    

答案 1 :(得分:10)

正确的解决方案是使用filteredValue的{​​{1}}属性,其中包含已过滤的集合以及p:dataTable的{​​{1}}属性,以向用户显示过滤器配置。

要保持会话bean中存储的filterValue过滤器,您还必须保留过滤后的数据。 p:column不会为您执行初始排序。

检查此示例JSF:

p:dataTable

使用此托管bean进行备份:

p:dataTable

答案 2 :(得分:1)

理想情况下,获取对数据表的引用(通过将视图数据表绑定到支持bean表示或遍历DOM树)并执行此操作

    Map<String,String> theFilterValues = new HashMap<String,String>();
    theFilterValues.put("filterColumn","fooValue");
    myDataTable.setFilters(theFilterValues);

将设置默认文本值,但可能不会应用过滤器。

或者,primefaces问题队列中的this post建议使用基于jquery的选项

    <script>
        jQuery(document).ready(function() {
        jQuery('input[id*="datumCol"]').val('2012-07-17');
         });
    </script>

答案 3 :(得分:1)

实现LazyDataModel时,我在类构造函数中为类变量添加了一个默认过滤器。在这个例子中,类变量被称为&#34;过滤器&#34;并且过滤是在&#34; isActive&#34;值为&#34; true&#34;:

的字段
public class ExtendedLazyListModel<T> extends LazyDataModel<T> {

    private final List<T> datasource;
    private Map<String, Object> filters;

    public ExtendedLazyListModel(List<T> datasource) {
        this.filters = new HashMap<>();
        filters.put("isActive", "true");
        this.datasource = datasource;
        this.setRowCount(datasource.size());
    }

然后在Load方法中,我添加了此代码来设置默认过滤器(仅适用于第一次调用):

public List<T> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, Object> filters) {
        //set default filter
        if (filters.isEmpty()){
            for (Field f : datasource.get(0).getClass().getDeclaredFields() ){
                if (this.filters.containsKey(f.getName())) {
                    filters.put(f.getName(), this.filters.get(f.getName()));
                    this.filters.remove(f.getName());
                }
            }
        }
.....

在这个例子中,我在XHTML文件中添加了过滤列p:column ...:

filterValue =&#34;真&#34; //是我为默认过滤器设置的值