Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 在primefaces数据表筛选器中设置默认值_Jsf_Jsf 2_Primefaces - Fatal编程技术网

Jsf 在primefaces数据表筛选器中设置默认值

Jsf 在primefaces数据表筛选器中设置默认值,jsf,jsf-2,primefaces,Jsf,Jsf 2,Primefaces,我在datatable上使用primefaces v3.5。我在一列上使用filter。 加载页面本身时,如何为过滤器设置默认值。理想情况下,获取对数据表的引用(通过将视图数据表绑定到支持bean表示或遍历DOM树)并执行此操作 Map<String,String> theFilterValues = new HashMap<String,String>(); theFilterValues.put("filterColumn","fooValue");

我在datatable上使用primefaces v3.5。我在一列上使用filter。
加载页面本身时,如何为过滤器设置默认值。

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

    Map<String,String> theFilterValues = new HashMap<String,String>();
    theFilterValues.put("filterColumn","fooValue");
    myDataTable.setFilters(theFilterValues);
Map theFilterValues=newhashmap();
filtervalues.put(“filterColumn”、“fooValue”);
setFilters(filtervalues);
将设置默认文本值,但可能不应用筛选器

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

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

jQuery(文档).ready(函数(){
jQuery('input[id*=“datumCol”]')).val('2012-07-17');
});

在primefaces中使用column标记的filterValue属性,例如

<p:datatable ... widgetVar="dataTableWidgetVar">
<p:column  ...    filterValue="#{BackingBean.defaultValue}">

然后,在javascript中创建一个简单的函数调用,用于在页面准备就绪时触发过滤器(小部件变量是通过PF中的jQuery创建的):


$j=jQuery;
$j(文档).ready(函数(){
dataTableWidgetVar.filter();
});

正确的解决方案是使用
p:dataTable
filterdvalue
属性,该属性包含过滤后的集合以及
p:column
filterdvalue
属性,向用户显示过滤器配置

要将
p:dataTable
过滤器存储在会话bean中,还必须保留过滤后的数据。
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>

#{e.user.id}
使用此托管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;
    }
}
@Named(value=“userListState”)
@会议范围
公共类UserListState实现可序列化{
私有映射过滤器状态=新HashMap();
私有列表筛选值;
公共用户列表状态(){
}
过滤器更改上的公共无效(过滤器事件过滤器事件){
filterState=filterEvent.getFilters();
filteredValue=(列表)filterEvent.getData();
}
公共字符串筛选器状态(字符串列){
返回filterState.get(列);
}
公共列表getFilteredValue(){
返回filteredValue;
}
public void setFilteredValue(列表filteredValue){
this.filteredValue=filteredValue;
}
}

在实现LazyDataModel时,我向类构造函数中的类变量添加了一个默认过滤器。在本例中,类变量称为“filters”,并在值为“true”的“isActive”字段上进行过滤:

公共类ExtendedLazyListModel扩展LazyDataModel{
私有最终列表数据源;
私有映射过滤器;
公共扩展LazylistModel(列表数据源){
this.filters=newhashmap();
过滤器。put(“isActive”、“true”);
this.datasource=数据源;
this.setRowCount(datasource.size());
}
然后在Load方法中,我添加了以下代码来设置默认过滤器(仅适用于第一次调用):

公共列表加载(int-first、int-pageSize、字符串排序字段、排序器排序器、映射过滤器){
//设置默认过滤器
if(filters.isEmpty()){
对于(字段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=“true”//是我为默认筛选器设置的值

:以这种方式,默认值是在筛选器值中设置的。但它不是working@kolussus:通过使用脚本函数,我试图获取默认值。但datatable的加载方法无法获取默认值result@Sagar尝试
$('youredColumnId\\:filter')。触发器('keyup')
要手动触发filter keyup filter事件以实现过滤效果,
@SessionScoped
可能是“大的”
@ViewScoped
在这里完全可以使用。请参阅@BalusC的帖子:此解决方案不设置过滤值,但不调用过滤。
@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;
    }
}
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());
    }
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());
                }
            }
        }
.....