Jsf 如何以编程方式设置

Jsf 如何以编程方式设置,jsf,primefaces,datatable,dynamically-generated,Jsf,Primefaces,Datatable,Dynamically Generated,使用JSF2.2和PrimeFaces4.0 基本上,我正试图以编程方式将select options下拉列表设置为in的过滤器。问题是,当我使用下面的代码设置它时,它只呈现一个简单的输入文本,尽管它确实触发了客户端过滤操作。如何让下拉列表显示 填充选项列表的代码 private SelectItem[] createFilterOptions() { List<SelectItem> options = new ArrayList<SelectItem>();

使用JSF2.2和PrimeFaces4.0

基本上,我正试图以编程方式将select options下拉列表设置为in的过滤器。问题是,当我使用下面的代码设置它时,它只呈现一个简单的输入文本,尽管它确实触发了客户端过滤操作。如何让下拉列表显示

填充选项列表的代码

private SelectItem[] createFilterOptions() {

    List<SelectItem> options = new ArrayList<SelectItem>();

    options.add(new SelectItem("", "Tout"));
    options.add(new SelectItem(0, "Pas encore"));
    options.add(new SelectItem(1, "Patient en retard"));
    options.add(new SelectItem(2, "Patient arrivé"));
    options.add(new SelectItem(3, "Trop attendu"));
    options.add(new SelectItem(4, "Patient préparé"));
    options.add(new SelectItem(5, "Examen en cours"));
    options.add(new SelectItem(6, "Examen terminé"));
    options.add(new SelectItem(7, "Résultats remis"));
    options.add(new SelectItem(8, "Examen annulé"));

    return options;
}

您可以在bean中设置filteroption,并将其从那里传递到xhtml

<p:datatable ... filtermode="#{bean.filtemode}"....
...
public class Bean{

  public getFiltermode(){
      return "filtermode";
  }

}
我在房间里四处张望。似乎只有当filterOptions属性是值表达式时,才会将其呈现为下拉列表

468    if(column.getValueExpression("filterOptions") == null) {
...        // ...            
471        writer.startElement("input", null);
...        // ...            
490    }
491    else {
...        // ...            
494        writer.startElement("select", null);
...        // ...            
514    }
乍一看这有点奇怪,但考虑到过滤选项通常在XHTML端的使用方式,这是有道理的。他们本可以在这里做得更好,例如,计算值的instanceof并检查它是否是SelectItem的数组或集合,但您必须使用提供给您的内容

您需要将其设置为引用bean属性的值表达式,而不是硬编码列表。创建一个应用程序范围的bean类数据,将该列表作为属性,以便{Data.filterOptions}可以使用该数据,最后在其周围创建一个ValueExpression,并将其设置为筛选器选项:

patSate.setFilterOptions(createValueExpression("#{data.filterOptions}", List.class));

有人吗?我必须编辑问题文本中的某些内容吗?您不应该修复setFilterBy和setSortBy吗?我修复了它,我仍然无法让它工作,@BalusC你是我的导师请帮助。这是不是在现有资源的情况下有多不可能?你如何实现这一点,为什么我不能像在XHTML中那样将SelectedItem数组交给setFilterOptions?我试过一次:column.setValueExpressionsetFilterOptions,filterexpress;但是现在它不工作了,我用filteroptions替换了setFilterOptions,猜猜它工作得很好,这很好,谢谢你,巴卢斯。
patSate.setFilterOptions(createValueExpression("#{data.filterOptions}", List.class));