2010-09-01 159 views
0

我需要在數據表中執行過濾器。如何在jsf數據表中過濾?

我有兩個下拉菜單,第一個就是靜態值..比如過濾名稱,dob,age.Based在打開的第二個下拉菜單中,並且過濾器顯示值。

<ice:selectOneMenu size="12" onchange="this.form.submit()" 
          partialSubmit="true" id="filterByPastDue" 
          valueChangeListener="#{details.filterByListener}"> 

<f:selectItem itemLabel="None" itemValue="1" /> 
<f:selectItem itemLabel="Name" itemValue="2" /> 
<f:selectItem itemLabel="Age" itemValue="3" /> 
    <f:selectItem itemLabel="DOB" itemValue="4" /> 


<ice:selectOneMenu        binding="#{person.selectFilterItems}" size="12"        id="OpenFilterMenu" rendered="false"> 

在我mangebean有邏輯得到第二個下拉值的值。

public void filterByListener(ValueChangeEvent valueChangeEvent) { 
    int filterBy = Integer 
      .parseInt((String) valueChangeEvent.getNewValue()); 

    switch (filterBy) { 

    case 1: { 
     filterItems = null; 
     filterItems = new HashSet<SelectItem>(); 
     filterOptions = null; 
     filterOptions = new HashSet<String>(); 
     outputTextFor = false; 
     selectFilterItems.setRendered(false); 

     break; 
    } 
    case 2: { 
     // clearing arraylist 
     filterItems = null; 
     filterItems = new HashSet<SelectItem>(); 
     filterOptions = null; 
     filterOptions = new HashSet<String>(); 

     // loading arrayList 
     for (int i = 0; i < person.size(); i++) { 
      filterOptions.add(person.get(i).getName() 
        .toString()); 
     } 

     Iterator it = filterOptions.iterator(); 

     while (it.hasNext()) { 
      String s = (String) it.next(); 
      filterItems.add(new SelectItem(s, s)); 

     } 
     // rendering components 
     outputTextFor = true; 
     selectFilterItems.setRendered(true); 

     break; 
    } 
    case 3: { 
     // clearing arraylist 
     filterItems = null; 
     filterItems = new HashSet<SelectItem>(); 
     filterOptions = null; 
     filterOptions = new HashSet<String>(); 
     // loading arrayList 
     for (int i = 0; i < person.size(); i++) { 
      filterOptions.add(person.get(i).getAge()); 
     } 
     Iterator it = filterOptions.iterator(); 

     while (it.hasNext()) { 
      String s = (String) it.next(); 
      filterItems.add(new SelectItem(s, s)); 

     } 
     // rendering components 
     outputTextFor = true; 
     selectFilterItems.setRendered(true); 

     break; 
    } 
    case 4: { 
     // clearing arraylist 
     filterItems = null; 
     filterItems = new HashSet<SelectItem>(); 
     filterOptions = null; 
     filterOptions = new HashSet<String>(); 
     // loading arrayList 

     for (int i = 0; i < person.size(); i++) { 
      filterOptions.add(person.get(i).getDOB()); 
     } 
     Iterator it = filterOptions.iterator(); 

     while (it.hasNext()) { 
      String s = (String) it.next(); 
      filterItems.add(new SelectItem(s, s)); 
     } 
     // rendering components 
     outputTextFor = true; 
     selectFilterItems.setRendered(true); 

     break; 
    } 
      default: { 
     // clearing arrayList 
     filterItems = null; 
     filterItems = new HashSet<SelectItem>(); 
     filterOptions = null; 
     filterOptions = new HashSet<String>(); 
     outputTextFor = false; 
     selectFilterItems.setRendered(false); 

     break; 
    } 
    } 

} 

現在我得到了第二個下拉值我的數據表中的值。

現在,如何獲取過濾器值顯示在datatable.I具有person對象,並需要顯示在第二個下拉列表中選擇的數據表。

回答

3

您需要預設屬性與所需的數據模型相關聯的h:dataTablevalue屬性。您可以在提交按鈕的action方法或第二個下拉列表的方法valueChangeListener中執行此操作。例如。

public void submit() { 
    this.dataModel = getDataModelSomehow(filterBy, filterOption); 
}