使用下拉列表primefaces datatable进行过滤

时间:2014-11-14 15:20:35

标签: jsf primefaces datatable

jsf 2.0 primefaces 5.1 glassfish 4

我通过下拉列表使用过滤,当我点击列表中的项目时,数据表被过滤,但下拉列表中的值仍显示"选择一个"而不是选定的值

<p:column headerText="Region" filterBy="#{wan.Region}"
            filterMatchMode="contains" >
      <f:facet name="filter">
          <p:selectOneMenu onchange="PF('table').filter()">
                <f:selectItem itemLabel="Select One" itemValue="#{null}"
                              noSelectionOption="true" />
                <f:selectItems value="#{wandbBean.regions}" />
          </p:selectOneMenu>
      </f:facet>
      <h:outputText value="#{wan.Region}" />
</p:column>

2 个答案:

答案 0 :(得分:2)

出现此问题是因为您未将value="#{wan.Region}"设置为<p:selectOneMenu onchange="PF('table').filter()">

因此,确切的代码应该是

<p:column headerText="Region" filterBy="#{wan.Region}"
            filterMatchMode="contains" >
      <f:facet name="filter">
          <p:selectOneMenu value="#{wan.Region}" onchange="PF('table').filter()">
                <f:selectItem itemLabel="Select One" itemValue="#{null}"
                              noSelectionOption="true" />
                <f:selectItems value="#{wandbBean.regions}" />
          </p:selectOneMenu>
      </f:facet>
      <h:outputText value="#{wan.Region}" />
</p:column>

答案 1 :(得分:0)

您需要按以下步骤更改代码:

<p:column headerText="Region" filterBy="#{wan.Region}"
            filterMatchMode="contains" >
      <f:facet name="filter">
          <p:selectOneMenu onchange="PF('table').filter()">
                <f:selectItem itemLabel="Select One" itemValue="#{null}"
                              noSelectionOption="true" />
                <f:selectItems value="#{wandbBean.regions}" 
                               itemValue="#{wan.Region.VALUE}"
                               itemLabel="#{wan.Region.LABEL}" />
          </p:selectOneMenu>
      </f:facet>
      <h:outputText value="#{wan.Region}" />
    </p:column>

值是要传递给控制器​​的任何值,标签是要在下拉菜单中显示的任何值。 此解决方案适用于PrimeFace 8.0版,但我没有使用较早的版本进行检查。