使用数据库对惰性primefaces数据库进行排序

使用数据库对惰性primefaces数据库进行排序,primefaces,lazy-loading,primefaces-datatable,Primefaces,Lazy Loading,Primefaces Datatable,我有大量的记录,所以我使用primefaces lazyloading从数据库中获取记录并显示,我已经实现了lazyDataModel的load方法,分页工作正常,但排序时无法正确排序,我的代码如下: LazyDataModel<StaffMsgingFltDisplayBean> defaultFlightProcesses = new LazyDataModel<StaffMsgingFltDisplayBean>() { @Override

我有大量的记录,所以我使用primefaces lazyloading从数据库中获取记录并显示,我已经实现了lazyDataModel的load方法,分页工作正常,但排序时无法正确排序,我的代码如下:

LazyDataModel<StaffMsgingFltDisplayBean> defaultFlightProcesses = new LazyDataModel<StaffMsgingFltDisplayBean>() {

            @Override
            public List<StaffMsgingFltDisplayBean> load(int first, int pageSize,
                    String sortField, SortOrder sortOrder, Map<String, String> filters) {
                List<CnsFlightProcess> defaultFlightProcessLazyList = null;
                List<StaffMsgingFltDisplayBean> displayBeans = null;
                try
                {
                  defaultFlightProcessLazyList = oneFlightMessageService.retrieveLast24hrsFlightLazy(first,pageSize,sortField,sortOrder);
                  displayBeans = processFltProcess(defaultFlightProcessLazyList);
                  int totalCount  = oneFlightMessageService.retrieveLast24hrsFlightLazyTotalCount();
                  setRowCount(totalCount);
                }
                catch(CNSDBException e)
                {
                    e.printStackTrace();
                }

                return displayBeans;
            }
LazyDataModel defaultflightprocesss=new LazyDataModel(){
@凌驾
公共列表加载(int-first,int-pageSize,
字符串排序字段、排序器排序器、映射过滤器){
List defaultFlightProcessLazyList=null;
List displayBeans=null;
尝试
{
defaultFlightProcessLazyList=oneFlightMessageService.RetrieveLast24hrsLightLazy(第一个,pageSize,sortField,sortOrder);
displayBeans=processFltProcess(defaultFlightProcessLazyList);
int totalCount=oneFlightMessageService.RetrieveLast24hrsLightLazyTotalCount();
setRowCount(totalCount);
}
捕获(CNSDBEException e)
{
e、 printStackTrace();
}
返回显示bean;
}
我的主要查询代码是:

Session session = this.getHibernateTemplate().getSessionFactory()
            .getCurrentSession();
    Transaction transaction = session.beginTransaction();
    Query query = null;
    //String sortOrderValue="desc";
    if(sortOrder.equals(SortOrder.ASCENDING))
    {
        query = session.getNamedQuery("retrieveLast24HrsFlightsLazyAsc");
    }
    else
    {
        query = session.getNamedQuery("retrieveLast24HrsFlightsLazyDesc");
    }


    query.setFirstResult(first);
    query.setMaxResults(pageSize);

    query.setParameter("fromDate", fromDate);
    query.setParameter("toDate", toDate);

    String sortFieldValue = retrieveSortField(sortField);


    query.setParameter("sortField", sortFieldValue);
    //query.setParameter("sortOrder", sortOrderValue);

    List<CnsFlightProcess> flightProcesses = query.list();
    transaction.commit();
会话会话=this.getHibernateTemplate().getSessionFactory() .getCurrentSession(); 事务=会话。beginTransaction(); Query=null; //字符串sortOrderValue=“desc”; if(排序器等于(排序器升序)) { query=session.getNamedQuery(“retrieveLast24HrsFlightsLazyAsc”); } 其他的 { query=session.getNamedQuery(“retrieveLast24HrsFlightsLazyDesc”); } query.setFirstResult(第一个); query.setMaxResults(页面大小); query.setParameter(“fromDate”,fromDate); setParameter(“toDate”,toDate); 字符串sortFieldValue=retrieveSortField(sortField); setParameter(“sortField”,sortFieldValue); //setParameter(“sortOrder”,sortOrderValue); List flightprocesss=query.List(); commit(); 查询是:

<query name="retrieveLast24HrsFlightsLazyDesc">
    <![CDATA[from CnsFlightProcess cfp where (cfp.crtDttime between :fromDate and :toDate) and (cfp.fltProcStatus = 'SENT' or cfp.fltProcStatus = 'PROCESSED') order by :sortField desc ]]>
</query>

<query name="retrieveLast24HrsFlightsLazyAsc">
    <![CDATA[from CnsFlightProcess cfp where (cfp.crtDttime between :fromDate and :toDate) and (cfp.fltProcStatus = 'SENT' or cfp.fltProcStatus = 'PROCESSED') order by :sortField ]]>
</query>

Xhtml代码:

<p:dataTable styleClass="list" var="flight" rowIndexVar="index" paginator="true" paginatorPosition="bottom" lazy="true" paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}" rows="2"
        rowStyleClass="#{(index % 2) eq 0? 'tablerow' : 'tablerowAlter'}"
        value="#{staffMsgingHandler.flightMessageBean.fltDisplayBeansLazy}"
        width="1100">

        <p:column>
            <f:facet name="header">
                <h:outputText
                            value="#{message['TokenNo']}"></h:outputText>
            </f:facet>
            <h:outputText value="#{flight.flightProcess.reqTokenNbr}"></h:outputText>
        </p:column>
        <p:column sortBy="#{flight.fltNumber}">
            <f:facet name="header">
                <h:outputText
                    value="#{message['FlightNumber']}"></h:outputText>
            </f:facet>
            <h:outputText value="#{flight.fltNumber}"></h:outputText> 
        </p:column>


        <p:column sortBy="#{flight.flightProcess.cnsFlightMstr.fltBpCd}">
            <f:facet name="header">
                <h:outputText
                    value="#{message['FromPoint']}"></h:outputText>
            </f:facet>
            <h:outputText value="#{flight.flightProcess.cnsFlightMstr.fltBpCd}"></h:outputText>
        </p:column>


你说的“排序时无法正确排序”是什么意思?你好,贾斯珀,谢谢你的帮助,好像有一个标题叫做“机场名称”它被设置为排序列。如果我单击它,它将进行排序,但下一页它将被取消排序。如果我再次单击以使其取消排序,它将不会执行任何操作。因此,不确定它是否实际也进行排序。我正试图通过从代码中设置它来传递:sort字段,但不确定这是否也是正确的方法。请添加您的(最小且相关)XHTML代码Hi Jasper,添加了XHTML代码您的bean的范围是什么?我建议使用
ViewScoped