2013-03-16 85 views

回答

1

理想的情况下,获得对数据表中的参考(或者是视图数据表绑定到后台bean表示或步行DOM树),做这个

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

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

另外,this post在primefaces问题队列提出了一种基于jQuery选择

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

:通过这种方式,默认值是在过滤器值中设置的。但它不起作用 – Sagar 2013-03-18 06:47:10

+0

@Sagar,哪一个不工作? Jquery或java位? – kolossus 2013-03-19 00:44:16

+0

@kolussus:通过使用脚本函数我想获得默认值。但是dataatable的加载方法没有得到结果 – Sagar 2013-03-19 05:53:03

9

使用在primefaces列标签的filterValue财产,像

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

然后,创建一个简单的函数调用JavaScript来触发过滤器,当页面准备好时(通过jQuery中的PF创建小部件变量):

<script type="text/javascript" target="body"> 
$j = jQuery; 
$j(document).ready(function() { 
dataTableWidgetVar.filter(); 
}); 
</script>  
7

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

为了让您的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> 

这个后盾托管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; 
    } 
} 
+0

best回答!应该这样检查。谢谢。 – dforce 2017-09-26 14:06:22

1

在实现LazyDataModel,我添加了一个默认的过滤器,在类的构造一类变量。在这个例子中,类变量被称为“过滤器”和滤波用值的“isActive”字段进行“真”:

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列中加入:柱...:

filterValue = “真” //是我为默认过滤器设置的值