Search code examples
grailspaginationgsp

Grails, paging doesn't work when using findAllByxx to get index-list


When I look at index.gsp for OfferHeader I get only the "Previous" button and when clicking on it until it finds the top the button disappear. The trouble is that I need to use the findAllBy-list to get a filtered listing so the respond can look like this:

respond offerHeader, model:[offerHeaderCount: offerHeader.count()]

because offerHeader.count() is not allowed so I used .size() instead.

Controllers index look like this:

def index(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    def offerHeader = OfferHeader.findAllByOfferType('o',params)
    def count = offerHeader.size()
    respond offerHeader, model:[offerHeaderCount: offerHeader.size()]
}

Amendment

Hmm Grails doesn't like me..

I got this error:

URI
    /offerHeader/index
Class
    groovy.lang.MissingPropertyException
Message
    null
Caused by
    No such property: createCriteria for class: com.torntrading.portal.OfferHeader

Around line 15 of grails-app\controllers\com\torntrading\portal\OfferHeaderController.groovy

12:
13:    def index(Integer max) {
14:        params.max = Math.min(max ?: 10, 100)
15:        def offerHeader = OfferHeader.createCriteria.list( params ) { eq ( "offerType", "o" )}
16:
17:        def count = offerHeader.size()
18:        respond offerHeader, model:[offerHeaderCount: offerHeader.totalCount

EDIT

creteCriteria should be used like this:

    def index(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        def offerHeader = OfferHeader.createCriteria().list( params ) { eq ( "offerType", "o" )}

        def count = offerHeader.size()
        respond offerHeader, model:[offerHeaderCount: offerHeader.totalCount]

    }

Solution

  • A criteria query can be better is this scenario:

    def offers = OfferHeader.createCriteria().list( params ) {
        eq ( "offerType", "o" )
    }
    
    respond offers, model: [offerHeaderCount: offers.totalCount]