我正在尝试在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>
答案 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列表(包括max
和offset
之类的内容)会传递到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])