我想在条件返回值中添加分页

时间:2012-04-04 11:25:20

标签: grails pagination

params.max = Math.min(params.max ? params.int('max') : 2, 100)
orders=OrderInfo.createCriteria().listDistinct()

对于分页,我们需要将params传递给列表,例如。 Post.list(params)。我怎么把它传递到这里?我试过但是给出了错误。

我们还要求我得到的总数。 但是我无法在

中设置参数
orders=OrderInfo.createCriteria().listDistinct()

请提供正确的代码

2 个答案:

答案 0 :(得分:7)

如果您将params作为list方法的第一个参数传递,则会得到PagedResultList,其方法为getTotalCount()。通过这个,您可以获得实例总数。

params.max = Math.min(params.max?.toInteger() ?: 25, 100)
params.offset = params.offset ? params.offset.toInteger() : 0

def orderInfoCriteria = OrderInfo.createCriteria()
def results = orderInfoCriteria.list(params) { // your criteria code ... }
log.debug "Getting ${results.size()} order infos of ${results.totalCount}"

阅读docs以获取有关critera的更多信息。

答案 1 :(得分:0)

Grails Criteria查询和分页参数

params.max = params?.max as Integer ?: 10
params.page = params?.page as Integer ?: 1
params.offset = (params.page - 1) * params.max
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
}