【问题标题】:DataTable column - Filter by selectItems itemLabel?DataTable 列 - 按 selectItems itemLabel 过滤?
【发布时间】:2017-07-31 19:31:37
【问题描述】:

我已经尝试对此进行研究并解决问题,所以我已经达到了询问的地步:

<p:column headerText="ProjectStatusCode" filter=?? filterMatchMode=?? >
    <p:selectOneMenu value="#{person.statusCodeIDForProject}">
        <f:selectItem itemLabel="None" 
                      itemvalue= "-1"/>
        <f:selectItems value="#{backingBean.allStatusCodes}" 
                       var="c" 
                       itemLabel="#{c.statusCodeName}" 
                       itemValue="#{c.statusCodeID}"/>
        <p:ajax listener="#{backingBean.editStatusCodeForProject(person.personID, person.statusCodeIDForProject)}"/>
    </p:selectOneMenu> 
</p:column>

理想情况下,我想按 itemLabel(在本例中为 statusName)过滤列。对于前端用户来说,状态名称比 ID 更有价值。

编辑

这是 primefaces 3.5.8

【问题讨论】:

  • 使用一个lazyDataModel,你拥有所有控制权

标签: java jsf primefaces


【解决方案1】:

试试这个

facelets 页面:

        <p:dataTable var="bb" value="#{backingBean.dataList}" widgetVar="dataTable"
                     emptyMessage="No item found with given criteria">
            <p:column filterBy="#{bb.status}" headerText="list header" footerText="exact" filterMatchMode="exact">
                <f:facet name="filter">
                    <h:selectOneMenu onchange="PF('carsTable').filter()" >
                        <f:selectItem itemLabel="Select One" itemValue="#{null}" noSelectionOption="true" />
                        <f:selectItems value="#{backingBean.statusList}"/>
                    </h:selectOneMenu>
                </f:facet>
                <h:outputText value="#{bb.status}" />
            </p:column>
        </p:dataTable>

这里的诀窍是让你的 StatusCodetoString() 返回 just statusName 一样

public class StatusClass {

    String statusName;
    int statusCode;

    public StatusClass() {
    }

    StatusClass(String name, int i) {
        this.statusName = name;
        this.statusCode = i;
    }

    public String getStatusName() {
        return statusName;
    }

    public void setStatusName(String statusName) {
        this.statusName = statusName;
    }

    public int getStatusCode() {
        return statusCode;
    }

    public void setStatusCode(int statusCode) {
        this.statusCode = statusCode;
    }


    //return just the status name
    @Override
    public String toString() {
        return "" + statusName;
    }

}

在你的 BackingBean 中你的

private ArrayList<DataClass> dataList;//points to your dataTable value
private ArrayList<StatusClass> statusList;//points to your statusList for selectOneMenu

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    相关资源
    最近更新 更多