Grails分页:如何使用分页限制行数
我有一个查询,它给出了大约100行的结果。这是控制器的代码Grails分页:如何使用分页限制行数,grails,Grails,我有一个查询,它给出了大约100行的结果。这是控制器的代码 def bandsOneTrack = { def bands = Band.executeQuery("Select b from Band as b where size(b.tracks) > (select count(t.id) from Band as ba join ba.tracks as t where ba.id = b.id and t.ourContract is not null) and (se
def bandsOneTrack = {
def bands = Band.executeQuery("Select b from Band as b where size(b.tracks) > (select count(t.id) from Band as ba join ba.tracks as t where ba.id = b.id and t.ourContract is not null) and (select count(t.id) from Band as ba join ba.tracks as t where ba.id = b.id and t.ourContract is not null) >= 1" )
render(view: 'bands_list' , model: [ bands : bands ])
}
它给出了大约100行的结果集,但是它们出现在同一个页面中。
现在我想使用分页,这样我就可以将它限制为每页仅20行。
我应该怎么做,以及如何为此使用分页。如果我没记错,向传递到视图的模型添加“最大值”和“偏移量”属性,它应该自动连接分页。此时,您应该能够使用paginate标记来迭代结果集。请参见此处的文档:
在分页标签上检查total参数。这应该是记录的总数。在您的例子中,是100,这样分页标记就可以计算总页数 大概是这样的:
Grails条件查询和分页参数
params.max = params?.max as Integer ?: 10
params.offset = params?.offset as Integer ?: 0
params.sort = params?.sort ?: "email"
params.order = params?.order ?: "asc"
params.filter = params?.filter ?: ""
params.packet = params?.packet ?: ""
def members = Member.createCriteria().list(params)
{
or
{
if(params.filter != ""){
ilike("firstName", "%" + params.filter + "%")
ilike("lastName", "%" + params.filter + "%")
ilike("email", "%" + params.filter + "%")
try {
params.filter as Long
eq("citizenId" , params.filter.toLong())
}catch (e) {
}
ilike("mobile", "%" + params.filter + "%")
}
}
}
def dataMembers = [:]
dataMembers.data = members
dataMembers.totalRecord = members.totalCount
render dataMembers as JSON
输出
{
"data": [
{
"id":1,
"firstName":name
},
{
"id":2,
"firstName":name
}
],
"totalRecord":5
}
我使用了max:25,但这将限制每页记录25条,但不会显示其余的记录。Alidad您能告诉我,我们设置params.max的方式,如何设置params.offset的默认值。您可以通过分页标记传递offset default。但是,如果设置了此偏移量,则还需要在第一次加载页面时告知操作从该偏移量开始。类似于这样的def ls=Book.executeQuery(“来自Book a”,[max:params.max,offset:params.offset?:20])大多数人都忘记了totalCount是所有书籍的总和,而不是第一次查询返回的书籍大小。你是个救生员。
params.max = params?.max as Integer ?: 10
params.offset = params?.offset as Integer ?: 0
params.sort = params?.sort ?: "email"
params.order = params?.order ?: "asc"
params.filter = params?.filter ?: ""
params.packet = params?.packet ?: ""
def members = Member.createCriteria().list(params)
{
or
{
if(params.filter != ""){
ilike("firstName", "%" + params.filter + "%")
ilike("lastName", "%" + params.filter + "%")
ilike("email", "%" + params.filter + "%")
try {
params.filter as Long
eq("citizenId" , params.filter.toLong())
}catch (e) {
}
ilike("mobile", "%" + params.filter + "%")
}
}
}
def dataMembers = [:]
dataMembers.data = members
dataMembers.totalRecord = members.totalCount
render dataMembers as JSON
{
"data": [
{
"id":1,
"firstName":name
},
{
"id":2,
"firstName":name
}
],
"totalRecord":5
}