Jsf Primefaces使用selectOneButton进行过滤

Jsf Primefaces使用selectOneButton进行过滤,jsf,primefaces,jsf-2.2,selectonemenu,Jsf,Primefaces,Jsf 2.2,Selectonemenu,我有一个带有性别列的数据表 我想根据性别筛选数据表中的记录 这是我那部分的代码 奇怪的是,我的性别栏会一直显示女性,即使我点击了“全部和男性”按钮。知道为什么吗 <p:column filterBy="#{staff.gender}" sortBy="#{staff.gender}" headerText="Gender" filterMatchMode="equals"> <f:facet name="filter"

我有一个带有性别列的数据表

我想根据性别筛选数据表中的记录

这是我那部分的代码

奇怪的是,我的性别栏会一直显示女性,即使我点击了“全部和男性”按钮。知道为什么吗

  <p:column filterBy="#{staff.gender}" sortBy="#{staff.gender}" headerText="Gender" filterMatchMode="equals">
                            <f:facet name="filter">
                                <p:selectOneButton onchange="PF('staffTable').filter()">
                                    <f:converter converterId="javax.faces.Boolean" />
                                    <f:selectItem itemLabel="All" itemValue="" />
                                    <f:selectItem itemLabel="Male" itemValue="true" />
                                    <f:selectItem itemLabel="Female" itemValue="false" />
                                </p:selectOneButton>
                            </f:facet>
                          <h:outputText value="#{staff.gender ? 'Male': 'Female'}" />
                        </p:column>

将列filterMatchMode属性值更改为exact将解决以下问题:

filterMatchMode="exact"

将filteredValue添加到table组件,该组件在backingbean中保留一个筛选值列表,如下所示:

<p:dataTable value="#{yourBean.listOfValues}" var="value" filteredValue="#{yourBean.listOfFilteredValues}">
在豆子里,当然是这样的:

private List<Object> listOfValues;
private List<Object> listOfFilteredValues;

public List<Object> getListOfValues() {
        return listOfValues;
}
public List<Object> getListOfFilteredValues() {
        return listOfFilteredValues;
    }

根据我的经验,p:启用排序的列过滤器中的组件在触发排序事件时总是有副作用。