使用grails中的偏移过滤集合

时间:2013-04-09 10:39:41

标签: grails collections dynamic-finders

我正在尝试使用findAll过滤grails中的集合,因此我只在其“estado”字段中获取具有特定值的实例。
我有这样的事情:

trabajos.findAll({it.estado.equals( "Pago")})

问题是我不知道如何对返回的集合进行分页 我看了一下grails文档,发现了这个

Book.findAll(Map queryParams, Closure whereCriteria)

但是当我尝试时

trabajos.findAll([offset: 0], {it.estado.equals("Pago")})

我收到以下异常

No signature of method: java.util.ArrayList.findAll() is applicable for argument types:       (java.util.LinkedHashMap, com.publidirecta.PersonalController$_show_closure2) values: [[offset:0], com.publidirecta.PersonalController$_show_closure2@a6bdb0] 
Possible solutions: findAll(), findAll(), findAll(groovy.lang.Closure), findAll(groovy.lang.Closure), find(), find()`  

这是为什么要实现某种分页,为什么或者我必须手动完成?

1 个答案:

答案 0 :(得分:0)

我猜你有两件事:grails和groovy Book.findAll(Map queryParams, Closure whereCriteria) - 是数据库中的查找器,它是grails的东西,你可以传递max param。
但是在trabajos.findAll({it.estado.equals( "Pago")})中你试图找到列表。这是很时髦的事情。详情请见herehere

如果您尝试从数据库中获取对象,请像这样使用

Book.findAll(Map queryParams, Closure whereCriteria)

如果是对象列表,请使用以下内容:

def filtered = trabajos.findAll({it.estado.equals( "Pago")})
def result = filteredList[offset..offset+max < filtered.size() ? offset+max : filtered.size()]