2010-09-01 67 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); 
}