【问题标题】:Primefaces "sortBy=" doesn't workPrimefaces“sortBy =”不起作用
【发布时间】:2014-11-06 02:34:57
【问题描述】:

我正在使用 Primefaces + JSF 开发一个应用程序。我的数据表可以工作,但排序有问题sortBy=,我试过sortBy="#{pc.rota}",但它也不起作用:

数据表显示所有行,我认为问题是sortBy= 或我的支持bean。

page.xhtml

<h:body>

    <h:form id="pcEmulation">

        <p:dataTable id="dataTablePCEMulation"  var="pc" value="#{pCEmulationBean.allPCEmulation}"   

                     rows="10"                         
                     rowsPerPageTemplate="5,30,50,100,200,300"


                     emptyMessage="Não foi encontrado"
                     >


            <f:facet name="header">
                PC Emulation Web
            </f:facet>

            <p:column headerText="PC - TX OLO's"  filterValue="#{pc.filtpcn}" filterMatchMode="contains" filterBy="#{pc.filtpcn}" >                
                <h:outputText value="#{pc.filtpcn}" />
            </p:column>

            <p:column headerText="Rota" sortBy="rota" >                
                <h:outputText value="#{pc.rota}" />
            </p:column>

            <p:column headerText="Origem">                    
                <h:outputText value="#{pc.origem}" />
            </p:column>

            <p:column headerText="Antigo">
                <h:outputText value="#{pc.epcn}" />
            </p:column>

            <p:column headerText="Destino">
                <h:outputText value="#{pc.destino}" />
            </p:column>

            <p:column headerText="PC-Novo">
                <h:outputText value="#{pc.realpcn}" />
            </p:column>


        </p:dataTable>

        <p:blockUI block="dataTablePCEMulation" trigger="dataTablePCEMulation">
            LOADING<br />
            <p:graphicImage value="/images/loading.gif"/><br />
            <p:graphicImage value="/images/tim-banner2.png" width="100px" height="45px"/>
        </p:blockUI>

    </h:form>
</h:body>

支持 bean:

@ManagedBean
//@ViewScoped
@SessionScoped
public class PCEmulationBean {

    public List<PCEmulation> allPCEmulation;



    public List<PCEmulation> getAllPCEmulation() {
        PCEmulationDAO dao = new PCEmulationDAO();
        try {
            allPCEmulation = dao.getAll();

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println("Problema no metodo list : " + e);
        }

        return allPCEmulation;
    }

}

【问题讨论】:

标签: sorting jsf jsf-2 primefaces datatable


【解决方案1】:

据我所知,Datatable 的 sortBy 属性仅适用于原始数据类型和字符串。如果 rota 是一个对象,您必须自己创建排序方法。或者,使用包含原始数据类型或字符串的 sortBy="#{pc.rota.someting}" 进行排序。

【讨论】:

  • 要将 sortBy 与 Objet 一起使用,您需要指定 sortFunction 属性,该属性指向一个方法,该方法返回与 Comparable 接口中的 compareTo 方法相同的一组值。
【解决方案2】:

为了使排序工作,您需要每次使用 getter 返回相同的列表对象,在您的情况下,您每次都从 dao 返回一个新列表。因此,如果列表以前为空,您应该只获取一个新列表。您的 getter 中的代码应如下所示。

   if (allPCEmulation == null) {
       PCEmulationDAO dao = new PCEmulationDAO();
        try {
            allPCEmulation = dao.getAll();

        } catch (ClassNotFoundException | SQLException e) {
            System.out.println("Problema no metodo list : " + e);
        }
    }

    return allPCEmulation;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多