通常,Grails生成的Controller列表方法中具有以下最后一行:

[userInstanceList: User.list(params), userInstanceTotal: User.count()]

如果我想通过特定条件限制用户,它看起来像
[userInstanceList: User.list(params) {
   ilike('login', '%test%')
 }, userInstanceTotal: User.count() {
   ilike('login', '%test%')
 }]

但这违反了DRY原则-重用标准闭包的最佳方法是什么?

最佳答案

来自条件构建器(结果类为PagedResultList)的分页结果具有属性totalCount,可以像在相同条件下调用count()一样使用该属性:

def userInstanceList = User.createCriteria().list(params) {
    ilike 'login', '%test%'
}
[userInstanceList: userInstanceList, userInstanceTotal: userInstanceList.totalCount]

09-05 14:48