2013-03-16 67 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 = 「真」 //是我爲默認過濾器設置的值