【问题标题】:how to put pagination to a list of non persistent domain - grails如何将分页放入非持久域列表 - grails
【发布时间】:2012-09-03 22:44:56
【问题描述】:

您好,我有一个非持久域的实体列表,因为它具有两个实体的组合属性。我通常使用

def c = Case.createCriteria()       
def caseList = c.list(  [max: criteria.max, offset: criteria.offset] 

但这在我的列表中不起作用,因为数据的获取是不同的。我必须首先从表 A 中获取数据,然后将其与表 B 中的数据结合起来。然后我循环每个以创建一个新实体。看看下面的代码。

if(criteria.caseNoteType==0)
        {
            caseNoteList = searchClaimNotesByClaimNote(criteria)
            for (CaseNote n: caseNoteList)
            {
                note = new ClaimNote()
                note.dateAssigned = new SimpleDateFormat("yyyy-MM-dd").format(n.cmCaseIdCmCase.assignedDate) //n.cmCaseIdCmCase.assignedDate
                note.claimOwner = n.cmCaseIdCmCase.employeeIdEmployee.formatName()
                note.caseNoteType = "Claim Notes"
                note.caseNoteTitle = n.caseNoteTitle
                note.noteOwner = n.employeeIdEmployee.formatName()
                note.claimNo = n.cmCaseIdCmCase.id
                note.clientName= n.cmCaseIdCmCase.clientIdClient.formatLastNameFirstNameMiddleInit()
                note.caseNoteText = n.caseNoteText
                note.id = n.id

                claimNotesList.add(note)
            }
            cmcaseList = searchClaimNotesByCaseComments(criteria)
            for (CmCase n: cmcaseList)
            {
                note = new ClaimNote()
                note.dateAssigned = new SimpleDateFormat("yyyy-MM-dd").format(n.assignedDate) // n.assignedDate
                note.claimOwner = n.employeeIdEmployee.formatName()
                note.caseNoteType = "Case Comments"
                note.caseNoteTitle = n.caseTitle
                note.noteOwner = n.employeeIdEmployee.formatName()
                note.claimNo = n.id
                note.clientName= n.clientIdClient.formatLastNameFirstNameMiddleInit()
                note.caseNoteText = n.caseComment
                note.id = n.id
                claimNotesList.add(note)

            }



        }

        def cmCaseListFinal = null
        def cmCaseCount = claimNotesList.size()
        if ('caseNoteType' == criteria.sort  ) {
            cmCaseListFinal = claimNotesList.sort { a, b ->
                if ( 'asc' == criteria.order )  a?.caseNoteType <=> b?.caseNoteType
                else   b?.caseNoteType <=> a?.caseNoteType
            }
        } else if ('dateAssigned' == criteria.sort  ) {
            cmCaseListFinal = claimNotesList.sort { a, b ->
                if ( 'asc' == criteria.order )  a?.dateAssigned <=> b?.dateAssigned
                else   b?.clientIdClient?.dateAssigned <=> a?.dateAssigned
            }
        } else {
            cmCaseListFinal = claimNotesList
        }

        return  cmCaseListFinal



    }

这是使用条件进行搜索的代码。合并其他实体也是如此。

def searchClaimNotesByCaseComments(ClaimNoteSearchCriteria criteria)
{

    log.info ( criteria )
    def c =  CmCase.createCriteria()

    def cmCaseList = c.list([max: criteria.max, offset: criteria.offset] )
    {

        createAlias("clientIdClient", "client")
        createAlias("employeeIdEmployee", "employee")
        createAlias("internalOrgIdInternalOrg", "InternalOrg")

        if ( criteria.clientSsnSearch  != null && criteria.clientSsnSearch.trim() != '' ) {
            criteria.clientSsnSearch = criteria.clientSsnSearch.trim()
            like('client.clientSsnSearch', criteria.clientSsnSearch)
        }
        //C#
        if (  criteria.clientVaFileNbrSearch  != null && criteria.clientVaFileNbrSearch.trim() != '' ) {
            criteria.clientVaFileNbrSearch = criteria.clientVaFileNbrSearch.trim()

            eq ( 'client.clientVaFileNbrSearch',  criteria.clientVaFileNbrSearch.toString()   )

        }
        // Service Number
        if (  criteria.clientMilitaryServiceNbr   != null && criteria.clientMilitaryServiceNbr.trim() != '' ) {
            criteria.clientMilitaryServiceNbr = criteria.clientMilitaryServiceNbr.trim()

            like ( 'client.clientMilitaryServiceNbr', ( criteria.clientMilitaryServiceNbr  as String).trim() + '%'  )

        }
        // Last Name
        if ( criteria.clientLastName != null && criteria.clientLastName != '' ) {

            like ( 'client.clientLastName', (criteria.clientLastName as String).trim() + '%'  )

        }
        // FirstName
        if (  criteria.clientFirstName  != null && criteria.clientFirstName  != ''  ) {

            like ( 'client.clientFirstName',   (criteria.clientFirstName  as String).trim() + '%'  )

        }
        // employeeIdEmployee
        if ( criteria.employeeIdEmployee != null ) {

            eq ( 'employee.id', criteria.employeeIdEmployee )

        }
        //poaStatus
        if ( criteria.intOrgLegalName != null && criteria.intOrgLegalName != '' ) {

            like ( 'InternalOrg.intOrgLegalName',  (criteria.intOrgLegalName  as String).trim() + '%'  )

        }
        if ( criteria.caseNoteText != null  && criteria.caseNoteText != '' ) {

            like( 'caseComment',  (criteria.caseNoteText  as String).trim() + '%'  )
        }


    }

    return cmCaseList

}

这是我的分页代码

<div class="gadgetLong">
  <div> <span class="gadgetName"><g:message code="claimSearch.searchResult.label" default="Search Results" /></span><span class="gadgetNumber">${ claimNoteList.size() }</span></div>
   <span class="gadgetNumber">${ claimNoteList.size() }</span>
  <span class="gadgetNumber"> <g:paginate next="Next" prev="Back"
        maxsteps="0" action="sortclaimSearch" 
          total="${ claimNoteList.size() }" /></span>
  </div>
  <div>

我想在不使用创建条件的情况下将分页添加到最终列表,因为它已经超出了搜索范围。有解决办法吗?或者我在做什么?谢谢

【问题讨论】:

    标签: java grails groovy pagination


    【解决方案1】:

    也许您可以使用一种方法来获取子列表并在视图中将子列表呈现为列表,并将 list.size() 呈现为总数......也许在服务中像这样(无论你想要什么):

    def getSubList(List objectList, Map params) {
        //verify params
        try {
            params.max = params.max.toInteger()
            params.offset = params.offset.toInteger()
        } catch (Exception exceptionInstance) {
            params.max = 10
            params.offset = 0
        }
        //Verify pagination params... if not you add them
        if (params.max <= 0) {
            params.max = 10
        }
        //Get total size of the list
        def objectInstanceTotal = objectList.size()
        //verify offset.
        if (params.offset < 0 || params.offset > objectInstanceTotal) {
            params.offset = 0
        }
        //Verify the pagination border (don't excess from array border).
        Integer bordeInteger = params.max + params.offset
        if (bordeInteger > objectInstanceTotal) {
            bordeInteger = objectInstanceTotal
        }
    
        //Extract the sublist based on the pagination.
        def objectSubList = objectList.subList(params.offset, bordeInteger)
    
        return objectSubList
    }
    

    在控制器中:

    def list = {
    
       def list = //Define your list
    
       def subList = service.getSubList(list, params)
    
       [list: subList, listInstanceTotal: list.size()]
    }
    

    在视图中,您一如既往地调用 de list 操作进行分页

    希望这会有所帮助;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 2018-08-08
      • 2013-11-04
      • 1970-01-01
      相关资源
      最近更新 更多