Grails分页:如何使用分页限制行数

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

我有一个查询,它给出了大约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 (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
}