0

私は巨大なレコードを持っているので、データベースと表示からレコードをフェッチするためにprimefaces遅延ロードを使用しています.lazyDataModelのロードメソッドを実装しており、ページネーションは機能していますが、ソート中に正しくソートすることはできません.私のコードは次のとおりです.

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;
            }

私の主なクエリコードは次のとおりです。

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();

クエリは:

<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>

4

0 に答える 0