grails paginate不起作用

时间:2013-06-12 14:26:54

标签: grails paginate

我正在尝试在grails中使用paginate标记,但它无效。

控制器中的

def show(Integer max) {
    params.max = Math.min(max ?: 10, 100)
    def etpse
    def total

    if (params.data == 'all') {

        etpse = Enterprise.findAll()
        total = Enterprise.count()
    }

    else {
        def paramsLike = "%" + params.data + "%"
        etpse = Enterprise.findAllByKeywordLike(paramsLike)
        total = Enterprise.countByKeywordLike(paramsLike)
    }

    [etpseList: etpse, instanceTotal: total]
}

在gsp中:

<div id='pagination'>
    <g:paginate total="${instanceTotal}" />
</div>

3 个答案:

答案 0 :(得分:2)

paginate标记不会过滤页面中的结果,也不会呈现项目列表。它只是根据您的请求参数为下一页/上一页创建链接。

您的控制器负责获取正确的数据页面,您的gsp负责呈现实际的项目列表。

paginate代码参数旨在将参数与GORM注入的list方法相匹配,并且几乎总是齐头并进:

class ItemController {
    def list() {
        [items: Item.list(params), itemCount: Item.count()]
    }
}

视图:

<g:each var="item" in="${items}">
    <!-- render items here -->
</g:each>

<g:paginate controller="item" action="list" total="${itemCount}"/>

在上面的代码中,params列表(包括maxoffset之类的内容)会传递到list域类的Item方法,这将会抓住一页数据。

paginate标记检查相同条目的请求参数,确定您正在查看的哪个页面,并使用正确的max和max值创建到下一页和上一页的必要链接偏移量。

答案 1 :(得分:2)

你走了。

def show(Integer max) {

    Integer offset = params.int("offset")
    Integer max = Math.min(params.int("max") ?: 10, 100)

    if (params.data == 'all') {
        params.data = '%';
    }

    def c = Enterprise.createCriteria()
    def results = c.list(max: max, offset: offset) {
      ilike('keyword', "%" + params.data + "%")
    }


    [etpseList: results, instanceTotal: results.totalCount]
}

答案 2 :(得分:1)

您必须将params max和offset传递给findAll,否则Grails不知道如何对结果集进行分页。

例如,

Book.findAll(query, [max: 10, offset: 5])